<<深入理解java虚拟机:JVM高级测性与最佳实践>> 关于gc的菜鸟级提问

<<深入理解java虚拟机:JVM高级测性与最佳实践>> 关于gc的菜鸟级提问

问题描述:

<<深入理解java虚拟机>> 关于gc的菜鸟级提问
在本书的第五章:"调优案例分析与实践" 中的127页,有一个"代码清单5-9 Full GC 记录"
针对该GC记录进行提问
1.DefNew是什么意思(感觉是新生代,作者从未提起这个代表什么,全拼是什么)
2.个人理解如果以[GC 开头的就是Minor GC,只收集新生代; 以[Full GC开头的就是所谓的全局GC,它同时会收集老年代、持久带、新生代,但是作者为什么说着10次GC都是Full GC
3.[Full GC的触发条件是什么,个人理解只要老年代空间不够就会触发[Full GC
4.另外该日志中各个时间都代表什么意思

摘自网络上的例子GC日志:
0.246: [GC 0.246: [DefNew: 1403K->105K(1984K), 0.0109275 secs] 1403K->1277K(6080K), 0.0110143 secs]

1.133: [GC 1.133: [DefNew: 960K->64K(960K), 0.0012208 secs]1.135: [Tenured: 7334K->7142K(7424K), 0.0213756 secs] 7884K->7142K(8384K), [Perm : 364K->364K(12288K)], 0.0226997 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]

上面的信息通过参数-XX:+PrintGCTimeStamps输出,不同参数(-verbose:gc,-XX:+PrintGCDetails)输出格式略有不同。
1. DefNew表示新生代使用serial垃圾收集器,这里用来标示GC方式;使用ParNew收集器显示为ParNew,使用Parallel Scavenge收集器这里显示为PSYoungGC。
2. 因为老年代每次都出现垃圾回收,所以确定出现了10次FullGC。至于前面为何显示为GC,求解答。
3. Full GC触发有以下几个条件:显示调用System.gc();旧时代空间不足;永久区空间已满;CMS GC出现promotion failed和concurrent mode failure; 统计得到的Minor GC晋升到旧生代的平均大小大于旧时代的剩余空间。
4. [quote]1.133: [GC 1.133: [DefNew: 960K->64K(960K), 0.0012208 secs]1.135: [Tenured: 7334K->7142K(7424K), 0.0213756 secs] 7884K->7142K(8384K), [Perm : 364K->364K(12288K)], 0.0226997 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] [/quote]
各个时间的含义:
1.133表示程序运行开始后1.133秒出现新生代垃圾回收; 0.0012208表示新生代的垃圾回收时间。
1.135表示程序运行开始后1.135秒出现老年代垃圾回收;0.0213756 secs表示老年代的垃圾回收时间;0.0226997 secs表示持久代的垃圾回收时间;
[quote]Times: user=0.01 sys=0.00, real=0.02 secs[/quote]前两项表示gc占用cpu user和sys的百分比,real指gc消耗的总时间。