一、GC收集器种类
1、serial垃圾收集器
单线程、复制算法
2、parnew垃圾收集器
多线程、复制算法
3、parallel scavenge收集器
多线程、复制算法、引入吞吐量概念(优化版parnew)
4、serial old
单线程、标记整理算法
5、parallel old
多线程、标记整理算法
6、CMS
多线程、标记清除算法(Mark-Sweep)
7、G1
多线程、标记整理算法、引入按区域管理概念
二、收集算法
1、标记 -清除算法(Mark-Sweep)
主要缺点有两个:
(1)效率问题:标记和清除过程的效率都不高;
(2)空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,碎片过多会导致大对象无法分配到足够的连续内存,从而不得不提前触发GC,甚至Stop The World。
2、复制算法(Copying)
主要缺点有两个:
(1)效率问题:在对象存活率较高时,复制操作次数多,效率降低;
(2)空间问题:內存缩小了一半;需要額外空间做分配担保(老年代)
3、标记-整理(Mark-Compact)
标记过程仍然与“标记-清除”算法一样
后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
4、分代收集算法(Generational Collection)
新生代:复制算法
老年代:“标记-清理”或“标记-整理”算法