理解GC日志(笔记)

Java HotSpot(TM) 64-Bit Server VM (25.91-b14) for windows-amd64 JRE (1.8.0_91-b14), built on Apr  1 2016 00:58:32 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 4080628k(616944k free), swap 8159380k(3974088k free)
CommandLine flags: -XX:InitialHeapSize=15728640 -XX:MaxHeapSize=15728640 -XX:MaxNewSize=10485760 -XX:NewSize=10485760 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
0.106: [GC (Allocation Failure) --[PSYoungGen: 5591K->5591K(9216K)] 9687K->9751K(15360K), 0.0015296 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.108: [Full GC (Ergonomics) [PSYoungGen: 5591K->0K(9216K)] [ParOldGen: 4160K->5133K(6144K)] 9751K->5133K(15360K), [Metaspace: 2632K->2632K(1056768K)], 0.0045365 secs] [Times: user=0.06 sys=0.00, real=0.00 secs] 
Heap
 PSYoungGen      total 9216K, used 4178K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 51% used [0x00000000ff600000,0x00000000ffa14930,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
  to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
 ParOldGen       total 6144K, used 5133K [0x00000000ff000000, 0x00000000ff600000, 0x00000000ff600000)
  object space 6144K, 83% used [0x00000000ff000000,0x00000000ff5035b8,0x00000000ff600000)
 Metaspace       used 2639K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 285K, capacity 386K, committed 512K, reserved 1048576K

0.106: [GC (Allocation Failure) --[PSYoungGen: 5591K->5591K(9216K)] 9687K->9751K(15360K), 0.0015296 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

0.108: [Full GC (Ergonomics) [PSYoungGen: 5591K->0K(9216K)] [ParOldGen: 4160K->5133K(6144K)] 9751K->5133K(15360K), [Metaspace: 2632K->2632K(1056768K)], 0.0045365 secs] [Times: user=0.06 sys=0.00, real=0.00 secs]

1、"0.106"和"0.108"这两个数字代表了GC发生的时间,这个数字是从Java虚拟机启动以来经过的秒数。

2、GC日志开头的“[GC”和“[FULL GC”说明了这次垃圾收集的停顿类型,而不是用来区分老年代GC还是新生代GC的。如果有FULL,说明这次GC是发生了Stop-The-World的。新生代收集器ParNew也会出现"[Full GC"(这一般是因为分配担保失败之类的问题,所以才导致STW)。如果是调用System.gc()方法所触发的收集,那么在这里将显示"FULL GC(System)"。

3、接下来的"[DefNew"、"[Tenured"、"[Perm"表示GC发生的区域,这里显示的区域名称与使用的GC收集器都是密切相关的。

例如:使用ParNew收集器中的新生代名为“Default New Generation”,所以显示的是“[DefNew”。如果是ParNew收集器,新生代名称就会变为"[ParNew",意为"Parallel New Generation"。如果采用Parallel Scavenge收集器,那它配套的新生代称为"PSYoungGen",老年代和永久代同理,名称也是由收集器决定的。

4、后面方括号内部的“5591K->0K(9216K)”,含义是“GC前该内存区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)”

5、而在方括号之外的“9751K->5133K(15360K)”表示“GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)”

6、再往后“0.0015296 secs”表示该内存区域GC所占用的时间,单位是秒。有的收集器会给出更具体的数据 [Times: user=0.00 sys=0.00, real=0.00 secs]。这里的user、sys和real与Linux的time命令所输出的时间含义一致,分别代表用户态消耗的CPU时间、内核态消耗的CPU时间和操作从开始到结束所经过的墙钟时间(Wall Clock Time)。墙钟时间包括各种各种非运算的等待耗时,例如等待磁盘I/O等,而CPU时间不包括这些耗时。

 

垃圾收集器的参数总结

UseSerialGC    Client模式下默认值,打开此开关将使用Serial+Serial Old的收集器组合进行收集
UseParNewGC使用ParNew+Serial Old的收集器组合进行收集
UseConcMarkSweepGC使用ParNew+CMS+Serial Old的收集器组合进行收集。Serial Old收集器作为CMS发生Concurrent Mode Failure失败后的后备收集器
UseParallelGCServer模式下的默认值,使用Parallel Scavenge+Serial Old的收集器组合进行收集
UseParallelOldGC使用Parallel Scavenge+Parallel Old的收集器组合进行收集
SurvivorRatio新生代中Eden区域和Survivor区域的容量比值,默认为8
PretenureSizeThreshold直接晋升到老年代的对象大小,大于这个参数的对象将直接分配到老年代
MaxTenuringThreshold晋升代老年代的对象年龄。对象经过一次Minor GC年龄加1,超过这个设置的年龄将进入老年代
UseAdaptiveSizePolicy动态调整Java堆中各个区域的大小以及进入老年代的年龄
HandlePromotionFailure是否允许分配担保失败。老年代的剩余空间不足以应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况
ParallelGCThreads设置并行GC时进行内存回收的线程数
GCTimeRatio仅在使用Parallel Scavenge收集器时生效。设置GC时间占总时间的比率,默认99,允许1%的GC时间
MaxGCPauseMillis仅在使用Parallel Scavenge收集器时生效。设置GC的对哒停顿时间
CMSInitiatingOccupancyFraction仅在使用CMS收集器时生效。设置CMS收集器在老年代空间被使用多少货触发垃圾收集。默认值为68%
UseCMSCompactAtFullCollection仅在使用CMS收集器时生效。完成垃圾收集后是否需要进行一次内存碎片整理
CMSFullGCsBeforeCompaction仅在使用CMS收集器时生效。设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理

 

博客内容来自《深入理解Java虚拟机》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值