java中各種垃圾收集器的原理

一個X號的QB發表於2016-08-22

1,Serial New/Serial Old(序列)

Serial New/Serial Old收集器是最基本最古老的收集器,它是一個單執行緒的收集器,並且它進行垃圾收集器時,必須暫停所用使用者執行緒,Serial New收集器時針對新生代的收集器,採用的是Copying演算法,Serial Old收集器是針對老年代的收集器,採用的是Mark-Compact演算法,它的優點是實現簡單,但是缺點是會給使用者帶來停頓。

2,Parrallel New (並行)

收集器是Serial收集器的多執行緒版本

3,Parrallel Scavenge

Parrallel Scavenge收集器是一個新生代的多執行緒收集器(並行收集器),它在回收期間不需要暫停其他使用者執行緒,其採用的Copying演算法,該收集器與前兩個演算法不同,它主要是為了達到一個可控的吞吐量

4,Parrallel Old

Parralle Old是Parrallel Scavenge的老年代版本,使用的多執行緒和Mark-Compact(標記整理)演算法

5,CMS

CMS收集器是一個以獲得最短回收停頓時間為目標的收集器,它是一種併發收集器,採用的是Mark-sweep演算法。

6,G1

G1收集器時當今收集器技術最前沿的成果,它是一款面向伺服器端的應用收集器,它能充分利用多核CPU、多核環境,因此它是一款並行與併發收集器,並且可建立可預測的停頓時間模型,整體上是基於標記清理,區域性採用複製

三個最基本的java垃圾回收演算法

1)複製演算法:兩個區域A和B,初始物件在A,繼續存活的物件移動到B,此為新生代經常用的演算法

2)標記清理:一塊矛,標記要回收的物件,然後回收,一定會出現碎片,那麼就出現了

3)標記-整理演算法:多了碎片整理,整理出更大的記憶體來存放物件

綜上:新生代基本用複製演算法,老年代基本用標記清理、CMS採用標記清理


相關文章