當前位置:編程學習大全網 - 源碼下載 - jvmgc算法的源代碼分析

jvmgc算法的源代碼分析

壹、垃圾收集器概述

如上圖所示,垃圾收集算法有七個* * *,三個屬於年輕壹代,三個屬於老壹代,G1屬於跨越年輕壹代和老壹代的算法。

JVM會從年輕壹代和老壹代中選擇壹個算法進行組合,線表示哪些算法可以組合。

二。每個垃圾收集器的描述

1,連載(年輕壹代)

年輕的收藏家,它可以與串行舊和CMS結合使用。

使用復制算法

使用單線程進行垃圾回收會導致停世界,停用戶進程。

客戶端模式下年輕壹代的默認算法

GC日誌關鍵字:DefNew(默認新壹代)

圖標(序列+舊序列)

2.帕紐(年輕壹代)

新生代捕收劑,可與系列老藥和CMS結合使用。

使用復制算法

使用多線程進行垃圾回收會導致停世界,其他策略同串行。

服務器模式下年輕壹代的默認算法

使用-XX:ParallelGCthreads參數來限制垃圾收集線程的數量。

GC日誌關鍵字:ParNew(並行新壹代)

圖形(全新+舊系列)

3.並行清除(年輕壹代)

新生代捕收劑可以與串、老、並聯結合使用,但不能與CMS結合使用。

使用復制算法

使用多線程進行垃圾收集會導致世界停止。

註意系統吞吐量

-XX:MaxGCPauseMillis:設置大於0的毫秒數,收集器將嘗試在此時間內完成垃圾收集。

-XX:GCTimeRatio:大於0小於100的整數,即垃圾收集時間與總時間的比值。設置越小,垃圾收集花費的時間越少,這樣CPU就可以花更多的時間在系統運行上,提高吞吐量。

-XX:UseAdaptiveSizePolicy:參數開關。啟動後系統動態調整各種參數,比如-Xmn,-xx: survivor ratio,這是與ParNew collector的重要區別。

GC日誌關鍵字:PSYoungGen

4.連載老(老壹代)

老壹代采集器,可與所有年輕壹代采集器結合使用(老壹代串行采集器)

垃圾收集造成的內存碎片將使用“標記-排序”算法進行排序。

使用單線程進行垃圾回收會導致停世界,停用戶進程。

GC日誌關鍵字:任期

圖標(序列+舊序列)

5、平行?老(老壹代)

舊收集器只能與並聯掃氣收集器(舊版本的並聯掃氣收集器)結合使用。

垃圾收集造成的內存碎片將使用“標記-排序”算法進行排序。

並行清除+並行刪除可用於與吞吐量相關的系統中。

GC日誌關鍵字:ParOldGen

圖標(並行清除+並行舊)

6.CMS(並發標記清除高級生成)

舊收集器可以與Serial和ParNew結合使用。

使用“標記-清除”算法,可以通過設置參數在垃圾收集期間將內存碎片整理出來。

1,UserCMSCompactAtFullCollection:默認開啟,內存滿時進行碎片整理,碎片整理時需要停止用戶進程,即停止世界發生。

2.CMSFullGCsBeforeCompaction:設置在不壓縮的情況下執行完全GC的次數,然後在壓縮的情況下執行完全GC(默認值為0,表示每次進入完全GC時都執行碎片整理)。

CMS是並發算法,意思是垃圾收集和用戶同時進行,但不是所有階段都同時進行,在初始標記和重新標記階段仍然需要停世界。CMS垃圾收集分為四個階段。

1,CMS初始標記Stop World只標記GC根可以直接關聯的對象,速度快。

2.GC根跟蹤的並發標記(CMS並發標記)需要很長時間,並且用戶進程不會停止。

3.CMS備註?Stop the World糾正對象的標記發生變化的部分的標記記錄,因為用戶程序在並發標記期間繼續運行,暫停時間較長,但比並發標記時間短得多。

4.用戶進程在CMS並發掃的同時會導致新的垃圾,耗時較長,不會停止用戶進程。

適用於要求高響應時間的系統。

GC日誌關鍵詞:CMS-initial-mark、CMS-concurrent-mark-start、CMS-concurrent-mark、CMS-concurrent-preclean-start、CMS-concurrent-preclean、CMS-concurrent-sweep、CMS-concurrent-reset等。

劣勢

1,對CPU資源非常敏感。

2.CMS collector無法處理浮動垃圾,即清理時用戶進程同時產生的垃圾只能在下壹次GC時回收。

3.因為使用了“標記-清除”算法,所以會產生大量的碎片。

圖示

7、G1

G1采集器沒用過,所以從網上找了些教程給大家了解壹下。

並行和並發

世代收集

空間整合

可預測的暫停

  • 上一篇:鞋店裝修的技巧,鞋店裝修要註意什麽?
  • 下一篇:Mac和Linux哪個適合編程?
  • copyright 2024編程學習大全網