GC何时被触发?
GC分为:
-
Scanvaenge GC
当新对象生成后,发现Eden区空间满了,就触发Scanvenge GC,对Eden区进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区,然后整理两个Survivor区。大部分对象是从Eden区开始的,同时Eden区不会设置的很大,所以Eden区的GC会比较频繁。所以用Scanvenge这种速度快效率高的算法,是Eden尽快腾出空间来。 -
Full GC
对整个堆进行清理,包括Young(新生代)、Tenured(老年代)和Perm(持久代)。Full GC比Scanvenge GC要慢。当老年代持久代被写满之后会进行Full GC,当System.gc()被调用时,上一次GC之后Heap的各域分配策略动态变化时可能会Full GC。