垃圾收集器

Scavenge(次收集) 和 Full GC(全收集)区别

新生代GC (Scavenge GC): 发生在新生代的GC,因为新生代的Java对象大多是朝生夕死,所以Scavenge GC非常频繁。
回收速度快,当Eden内存空间不足时,会触发Scavenge GC。
一般情况下,当新对象生成时,并且在Eden中申请空间失败,就会触发Scavenge GC,对Eden区进行GC,清除非存活对象,
将尚存活的对象移动至Survivor区,然后整理两个Survivor区,这种方式的GC是对年轻代的Eden区进行,不会影响老年代。

老年代GC (Full GC/Major GC): Full GC是指发生在老年代的GC。出现了Full GC一般至少会伴随一次Minor GC。
老年代的对象大多是Minor GC过程中从新生代进入老年代。比如分配担保失败。Full GC的速度一般会比Minor GC慢十倍以上。
当老年代内存不足时或者显式调用System.gc()时候,会触发Full GC。

次收集:
当年轻代堆空间紧张会被触发,相对于全收集,收集间隔较短。

全收集:
当老年代或者持久代空间满了时候会触发全收集操作。可以使用System.gc()显式调用。
全收集一般会根据堆大小,需要的时间较长。不过全收集时间超过3s-5s,那就太长了。

新生代收集器:
Serial
ParNew
Parallel scavenge

老年代收集器:
CMS(Concurrent Mark Sweep)
Serial Old
Parallel Old

新老通吃:
G1: Garbadge First