JVM垃圾收集器们
一、串行GC
串行GC是Java SE 5 和 6里默认的GC。年轻代和老年代的垃圾收集都是串行的。此外,它使用的是标记-压缩算法。这种方法将存留下来的老内存移到堆的前端,便于新内存申请得到位于堆尾的连续内存块。这种内存的压缩使得在堆上申请内存块变得更迅速。
串行GC用的多,暂停时间短,还能仅仅利用一个虚拟进程进行垃圾收集工作,直到今天,它依然坚挺于现在的硬件之上,管理着大量非凡的应用,却只要比较低的代价。
二、并行GC
在年轻代使用多线程进行垃圾收集。默认情况下,在N核CPU主机上,它使用的垃圾收集器线程有N个。在单核CPU的主机上,它和串行GC的性能相当。它使用的算法如下:
年轻代:拷贝算法(并行版本),老年代:标记-压缩算法(并行版本)。
三、并发标记清理收集器(CMS)
在年轻代使用拷贝算法。老年代进行收集时,对存活对象不进行复制和压缩,会导致内存的碎片问题。