Java8中GC收集器詳解

新生代默認垃圾回收算法:標記複製          

老年代默認回收算法:標記整理

Minor GC和Full GC

Minor GC只針對新生代,觸發條件:當Eden區滿時,觸發Minor GC。

Full GC包含新生代和老年代,觸發條件:

(1)調用System.gc時,系統建議執行Full GC,但是不必然執行

(2)老年代空間不足

(3)方法區空間不足

(4)通過Minor GC後進入老年代的平均大小大於老年代的可用內存

(5)由Eden區、From Space區向To Space區複製時,對象大小大於To Space可用內存,則把該對象轉存到老年代,且老年代的可用內存小於該對象大小。

接下里我們需要查看Java8默認的GC收集器:

查看Java8默認的GC收集器

java -XX:+PrintCommandLineFlags -version

結果如下圖:

-XX:+UseParallelGC實際上是Parallel Scavenge (新生代)+ Parallel Old(老年代)

查看GC詳情

java -XX:+PrintGCDetails -version

結果如下 

 下面我們來講一下GC收集器

新生代:

1.serial收集器

單線程,工作時必須暫停其他工作線程。多用於client機器上,使用複製算法
2、ParNew收集器

serial收集器的多線程版本,server模式下虛擬機首選的新生代收集器。複製算法

3、Parallel Scavenge收集器

複製算法,可控制吞吐量的收集器。吞吐量即有效運行時間。

老年代:

4、Serial Old收集器

serial的老年代版本,使用整理算法。

5、Parallel Old收集器
第三種收集器的老年代版本,多線程,標記整理
6、CMS收集器
目標是最短回收停頓時間。

7、G1收集器

基本思想是化整爲零,將堆分爲多個Region,優先收集回收價值最大的Region

垃圾回收器的選擇策略:

1、單CPU或者小內存,單機程序 — -XX:+UseSerialGC

2、多CPU,需要大吞吐量,如後臺計算型應用

-XX:+UseParallelGC + -XX:+UseParallelOldGC

3、多CPU,追求低停頓時間,快速響應如互聯網應用

-XX:+UseParNewGC + -XX:+UseConcMarkSweepGC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章