MemoryMXBean

package cn.zno.outofmomery;

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.util.ArrayList;
import java.util.List; public class Test {
MemoryMXBean memoryMXBean;
{
memoryMXBean = ManagementFactory.getMemoryMXBean();
System.out.println(memoryMXBean.isVerbose());
} void h(){
List<byte[]> list = new ArrayList<byte[]>();
while(true){
// System.out.println(memoryMXBean.getNonHeapMemoryUsage());
System.out.println(memoryMXBean.getHeapMemoryUsage());
list.add(new byte[1024*1024]);
}
} public static void main(String[] args) {
new Test().h();
}
}
  • 垃圾回收是否启用
  • 获取堆内存使用情况
  • 获取非堆内存使用情况

VM args

-verbose:gc  -XX:+PrintGCDetails

或

-verbose:gc

或

-Xloggc:D://data.log 

或

-Xloggc:D://data.log -XX:+PrintGCDetails

运行结果:

true
init = (32768K) used = (594K) committed = (31680K) max = (31680K)
init = (32768K) used = (1618K) committed = (31680K) max = (31680K)
init = (32768K) used = (2642K) committed = (31680K) max = (31680K)
init = (32768K) used = (3666K) committed = (31680K) max = (31680K)
init = (32768K) used = (4690K) committed = (31680K) max = (31680K)
init = (32768K) used = (5714K) committed = (31680K) max = (31680K)
init = (32768K) used = (6738K) committed = (31680K) max = (31680K)
init = (32768K) used = (7762K) committed = (31680K) max = (31680K)
[GC 7762K->7548K(31680K), 0.0032242 secs]
init = (32768K) used = (8572K) committed = (31680K) max = (31680K)
init = (32768K) used = (9689K) committed = (31680K) max = (31680K)
init = (32768K) used = (10887K) committed = (31680K) max = (31680K)
init = (32768K) used = (11911K) committed = (31680K) max = (31680K)
init = (32768K) used = (12935K) committed = (31680K) max = (31680K)
init = (32768K) used = (13959K) committed = (31680K) max = (31680K)
init = (32768K) used = (14983K) committed = (31680K) max = (31680K)
init = (32768K) used = (16007K) committed = (31680K) max = (31680K)
[GC 16007K->15739K(31680K), 0.0032697 secs]
init = (32768K) used = (16824K) committed = (31680K) max = (31680K)
init = (32768K) used = (17849K) committed = (31680K) max = (31680K)
init = (32768K) used = (18873K) committed = (31680K) max = (31680K)
init = (32768K) used = (19897K) committed = (31680K) max = (31680K)
init = (32768K) used = (20921K) committed = (31680K) max = (31680K)
init = (32768K) used = (21945K) committed = (31680K) max = (31680K)
init = (32768K) used = (22969K) committed = (31680K) max = (31680K)
init = (32768K) used = (23993K) committed = (31680K) max = (31680K)
[Full GC 23993K->23932K(31680K), 0.0051448 secs]
init = (32768K) used = (24956K) committed = (31680K) max = (31680K)
init = (32768K) used = (26020K) committed = (31680K) max = (31680K)
init = (32768K) used = (27044K) committed = (31680K) max = (31680K)
init = (32768K) used = (28068K) committed = (31680K) max = (31680K)
init = (32768K) used = (29092K) committed = (31680K) max = (31680K)
init = (32768K) used = (30116K) committed = (31680K) max = (31680K)
init = (32768K) used = (31140K) committed = (31680K) max = (31680K)
[Full GC 31140K->31100K(31680K), 0.0034119 secs]
[Full GC 31100K->31090K(31680K), 0.0033546 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at cn.zno.outofmomery.Test.h(Test.java:)
at cn.zno.outofmomery.Test.main(Test.java:)

垃圾回收格式解读

init = 33554432(32768K) used = 24568936(23993K) committed = 32440320(31680K) max = 32440320(31680K)
[Full GC 23993K->23932K(31680K), 0.0051448 secs]

-----------------------------------------------------------
[Full GC gc前used->gc后used(committed), 耗费时间]

参考 : https://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

Measurement

Throughput and footprint are best measured using metrics particular to the application. For example, throughput of a web server may be tested using a client load generator, while footprint of the server might be measured on the Solaris Operating System using the pmap command. On the other hand, pauses due to garbage collection are easily estimated by inspecting the diagnostic output of the virtual machine itself.

The command line option -verbose:gc causes information about the heap and garbage collection to be printed at each collection. For example, here is output from a large server application:

               
[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]

Here we see two minor collections followed by one major collection. The numbers before and after the arrow (e.g., 325407K->83000K from the first line) indicate the combined size of live objects before and after garbage collection, respectively. After minor collections the size includes some objects that are garbage (no longer alive) but that cannot be reclaimed. These objects are either contained in the tenured generation, or referenced from the tenured or permanent generations.

The next number in parentheses (e.g., (776768K) again from the first line) is the committed size of the heap: the amount of space usable for java objects without requesting more memory from the operating system. Note that this number does not include one of the survivor spaces, since only one can be used at any given time, and also does not include the permanent generation, which holds metadata used by the virtual machine.

The last item on the line (e.g., 0.2300771 secs) indicates the time taken to perform the collection; in this case approximately a quarter of a second.

The format for the major collection in the third line is similar.

The format of the output produced by -verbose:gc is subject to change in future releases.

The option -XX:+PrintGCDetails causes additional information about the collections to be printed. An example of the output with -XX:+PrintGCDetails using the serial garbage collector is shown here.

               
[GC [DefNew: 64575K->959K(64576K), 0.0457646 secs] 196016K->133633K(261184K), 0.0459067 secs]

indicates that the minor collection recovered about 98% of the young generation, DefNew: 64575K->959K(64576K) and took 0.0457646 secs (about 45 milliseconds).

The usage of the entire heap was reduced to about 51% 196016K->133633K(261184K) and that there was some slight additional overhead for the collection (over and above the collection of the young generation) as indicated by the final time of 0.0459067 secs.

The option -XX:+PrintGCTimeStamps will add a time stamp at the start of each collection. This is useful to see how frequently garbage collections occur.

111.042: [GC 111.042: [DefNew: 8128K->8128K(8128K), 0.0000505 secs]111.042: [Tenured: 18154K->2311K(24576K), 0.1290354 secs] 26282K->2311K(32704K), 0.1293306 secs]

The collection starts about 111 seconds into the execution of the application. The minor collection starts at about the same time. Additionally the information is shown for a major collection delineated by Tenured. The tenured generation usage was reduced to about 10% 18154K->2311K(24576K) and took 0.1290354 secs (approximately 130 milliseconds).

As was the case with -verbose:gc, the format of the output produced by -XX:+PrintGCDetailsis subject to change in future releases.

ManagementFactory (二) getMemoryMXBean的更多相关文章

  1. java 利用ManagementFactory获取jvm,os的一些信息--转

    原文地址:http://blog.csdn.net/dream_broken/article/details/49759043 想了解下某个Java项目的运行时jvm的情况,可以使用一些监控工具,比如 ...

  2. java监控之ManagementFactory分析

    The ManagementFactory class is a factory class for getting managed beans for the Java platform. This ...

  3. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  4. 深入理解java虚拟机---JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(十二)

    引用:https://www.cnblogs.com/yulei126/p/6777323.html JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)   1.背景 2.为什么废 ...

  5. 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态

    最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...

  6. 前端开发中SEO的十二条总结

    一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...

  7. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  8. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  9. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

随机推荐

  1. VS启用IIS调试的方法及可能碰到的问题。

    经常有这种情况, 开发机本地正常, 但是一旦发布到服务上后, 就出现各种问题. 这是由于开发机和服务器环境不一样造成的, 所以开发时要尽可能的模拟真实性.  这时候, VS的这个功能就帮大忙了. 如何 ...

  2. NBUT 1120 Reimu's Teleport (线段树)

    题意: 有n个格子,一开始全部面向top.接下来的每次修改F a b ,如果 a>b则将a~b之间的格子全面置为向右,否则置为向左.对于每个询问Q输出向左.top.右的数量. 思路: 普通线段树 ...

  3. DB time实时过程分析

    在我们查看awr报告的时候总是会有一个关键指标需要注意,那就是DB time,这个指标一般都是通过awr报告来看到的.比如我们得到的awr报告头部显示的下面的信息,我们就清楚的知道DB time是15 ...

  4. JVM——类加载器的双亲委派模型

    类加载器双亲委派模型,如下图所示: 双亲委派模型的工作过程 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此 ...

  5. 可以Ping通和DNS解析,但打不开网页的解决办法

    一. 网络故障表现为: 1.Ping地址正常,能ping通任何本来就可以ping通地址,如网关.域名. 2.能DNS解析域名. 3.无法打开网页,感觉是网页打开的一瞬间就显示无网络连接. 4.只需要连 ...

  6. css实现鼠标经过导航文字偏位效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. python 传入参数返回的时候好像有些时候会出现莫名其妙的循环

    def handle_field(name, s_len, s): #some code #return s would error but return not.... #return s for ...

  8. JS判断手机访问页面,根据手机访问或者PC访问跳转

    当用户访问你网站时,如果是PC端访问,则不作处理,如果是手机或者平板访问,就跳转到自己定义的手机页面去,这个在做webapp的时候经常用到,把代码分享给大家,希望对大家有所帮助. 首先,你要在页面中引 ...

  9. C# 使用NPlot绘图

    首先要将下载的NPlot.dll加到工具箱里,拖一个控件到窗体上,声明using NPlot. 一.入门 1. 对所绘的图进行打印与保存 private void print() { myPlot.P ...

  10. Dispatcher

    Dispatcher是guava EventBus的事件分发器. Dispatcher是抽象类, 抽象方法: abstract void dispatch(Object event, Iterator ...