参考:理解GC日志
JVM长常用的有那些参数?
-Xms:初始堆大小,默认为物理内存的1/64(<1GB);
-Xmx:最大堆大小
-Xmn:新生代的内存空间大小,整个堆大小=新生代大小 + 老生代大小 + 永久代大小。
-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。(1:1:8)
-Xss:每个线程的堆栈大小。
-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。
-XX:MaxPermSize:设置永久代最大值。物理内存的1/4。
如何查看GC日志?
GC发生的时间
GC停顿类型
GC发生的区域
GC内存使用情况和堆的使用情况
GC所占用的时间
详细内容
33.125:[GC[DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680 secs]
100.667:[FullGC[Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K(21248K)],0.0150007 secs][Times:user=0.01 sys=0.00,real=0.02 secs]
GC发生的时间:
最前面的数字“33.125:”和“100.667:”代表了GC发生的时间,这个数字的含义是从Java虚拟机启动以来经过的秒数。
GC停顿类型:
GC日志开头的“[GC”和“[Full GC”说明了这次垃圾收集的停顿类型
。
例如下面这段新生代收集器ParNew的日志也会出现“[Full GC”(这一般是因为出现了分配担保失败之类的问题,所以才导致STW)。如果是调用System.gc()方法所触发的收集,那么在这里将显示“[Full GC(System)”。
[Full GC 283.736:[ParNew:261599K->261599K(261952K),0.0000288 secs]
GC发生的区域:
“[DefNew”、“[Tenured”、“[Perm”表示GC发生的区域,这里显示的区域名称与使用的GC收集是密切相关的。
GC前该内存区域已使用容量->GC后该内存区域已使用容量:
后面方括号内部的“3324K->152K(3712K)”含义是“GC前该内存区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)”。
而在方括号之外的“3324K->152K(11904K)”表示“GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)”。
GC所占用的时间:
“0.0025925 secs”表示该内存区域GC所占用的时间,单位是秒。
Boy-20180725