5.GC是什么时候触发的
由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC和Full GC。
5.1Scavenge GC
一般情况下,当新对象生产,并且在Eden申请空间失败时,就会触发Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理survivor的两个区。这种方式的GC是对年轻代的eden区进行,不会影响到老年代。因为大部分对象都是从eden开始的,同时eden区不会分配的很大,所以eden区的GC会很频繁。因此,一般在这里需要使用速度快、效率高的算法,使eden去能尽快空闲出来。
5.2 Full GC
对于整个堆进行整理,包括Yong 、Tenured 、Permemate。Full GC因为需要对整个堆进行回收,所以比Scavenge GC要慢,因此应该尽可能减少Full GC的次数。在对JVM调优的过程中,很大一部分工作就是对于Full GC的调节。有如下原因可能导致Full GC:
1)老年代被写满;
2)持久代被写满;
3)System.gc()被显式调用;
4)上一次GC后Heap的区域分配策略动态变化。