1. 分類總覽
2. 簡述
1). 新生代收集器
a. Serial:單線程收集器,垃圾清理會導致其他全部線程停頓(Stop The World), 新生代默認收集器(複製算法);
b. ParNew: Serial多線程版本(多CPU環境中效果優於Serial)(複製算法);
c. Parallel Scanvenge:並行多線程收集器,可以自由最大停頓時間和吞吐量大小。GC停頓時間可以通過犧牲吞吐量和新生代空間來換取(複製算法);
2). 老年代收集器
a. Series Old: Series老年代版本,單線程(“標記-整理”算法,);
b. Parallel Old: Parallel Scavenge的老年底版本,二者可以搭配使用,多線程(“標記-整理”算法);
c. CMS(Concurrent Mask Sweep):重點在響應速度("標記-清除"算法)
分爲初始標記、併發標記、重新標記、併發清除四個過程。
初始標記會停頓時間很短;重新標記修正併發標記過程中的變動數據,停頓時間比初始標記略長;
併發標記、併發清除時間較長,但是可以併發運行其他工作線程。
缺點:
對CPU資源敏感
無法清理浮動垃圾(垃圾清理的時候產生的垃圾無法清除,只能等待下次清除)
使用標記-清除算法會導致大量的內存碎片
3)“新生”+“老年”
G1收集器
特點:
a. 並行併發
b. 分代收集
c. 空間整理
d. 可預測的停頓
參考《深入理解Java虛擬機》周志明 3.3