Minor GC和Full GC

Minor GC:

新生代GC,指发生在新生代的垃圾收集动作,因为java对象大多具备朝生夕灭的特性,所有Minor GC非常频繁,速度也很快.

Full GC:

指发生在老年代的GC,初选了Major GC,经常会伴随着至少一次的Full GC(并非绝对).Full GC的速度一般会比Minor GC慢10倍以上.


什么时候会进行Minor GC?

给新对象分配内存,新生代空间不足的时候.


什么时候会进行Full GC?
空间分配担保,在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果这个
条件成立,那么Minor GC可以确保是安全的,如果不成立,则虚拟机会查看HandlePromotionFailure设置值是否允许担保失败,
如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均是大小,如果大于,那么会尝试着
进行一次Minor GC,尽管这次Minor GC是有风险的;如果小于,或者HandPromotionFailure设置不允许冒险,那此时就进行一次Full GC.

在JDK 6 Update24之后的规则变为只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行Minor GC,否则将进行 Full GC.

什么时候对象将直接进入老年代?

大对象直接进入老年代,比如很长的字符串及数组.
长期存活的对象进入老年代.
如果Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或者等于该年龄的对象就可以直接进入老年代.


猜你喜欢

转载自blog.csdn.net/dx94sg/article/details/80567425