導航:首頁 > 源碼編譯 > jvmgc演算法

jvmgc演算法

發布時間:2025-03-16 08:28:30

❶ JVM 技術詳解:常見的 GC 演算法(Parallel/CMS/G1)

學習了 GC 演算法的相關概念之後,我們將介紹在 JVM 中這些演算法的具體實現。首先要記住的是,大多數 JVM 都需要使用兩種不同的 GC 演算法——一種用來清理年輕代,另一種用來清理老年代。廳行

我們可以選擇 JVM 內置的各種演算法。如果不通過參數明確指定垃圾收集演算法,則會使用相應 JDK 版本的默認實現。本章會詳細介紹各種演算法的實現原理。

串列 GC 對年輕代使用 mark-(標記—復制)演算法,對老年代使用 mark-sweep-compact(標記—清除—整理)演算法。

兩者都是單線程的垃圾收集器,不能進行並行處理,所以都棗型會觸發全線暫停(STW),停止所有的應用線程。

因此這種 GC 演算法不能充分利用多核 CPU。不管有多少 CPU 內核,JVM 在垃圾收集時都只能使用單個核心。

要啟用此款收集器,只需要指定一個 JVM 啟動參數即可,同時對年輕代和老年代生效:

該選項只適合幾百 MB 堆內存的 JVM,而且是單核 CPU 時比較有用。

對於伺服器端來說,因為一般是多個 CPU 內核,並不推薦使用,除非確實需要限制 JVM 所使用的資源。大多數伺服器端應用部署在多核平台上,選擇 串列 GC 就意味著人為地限制了系統資源的使用,會導致資源閑置,多餘的 CPU 資源也不能用增加業務處理凳伏猜的吞吐量。

關於串列垃圾收集器的日誌內容,我們在後面的內容《GC 日誌解讀與分析》之中進行詳細的講解。

並行垃圾收集器這一類組合,在年輕代使用「標記—復制(mark-)演算法」,在老年代使用「標記—清除—整理(mark-sweep-compact)演算法」。年輕代和老年代的垃圾回收都會觸發 STW 事件,暫停所有的應用線程來執行垃圾收集。兩者在執行「標記和復制/整理」階段時都使用多個線程,因此得名「 Parallel 」。通過並行執行,使得 GC 時間大幅減少。

通過命令行參數 -XX:ParallelGCThreads=NNN 來指定 GC 線程數,其默認值為 CPU 核心數。可以通過下面的任意一組命令行參數來指定並行 GC:

並行垃圾收集器適用於多核伺服器,主要目標是增加吞吐量。因為對系統資源的有效使用,能達到更高的吞吐量:

❷ GC的復制演算法和標記整理演算法

復制演算法
復制演算法是將內存劃分為兩個區間,在任意時間點,所有動態分配的對象都只能分配在其中的一個區間(稱為活動區間),而另外一個區間(空閑區間)是空閑的。
當有效內存空間耗盡時,JVM將暫停程序運行,開啟復制GC線程。接下來GC線程會將活動區的存活對象,全部復制到空閑區間,且嚴格按照內存地址依次排列,與此同時,GC線程將更新存活對象的內存引用地址指向新的內存地址。
此時,空閑區間已經與活動區間交換,而垃圾對象現在已經全部留在了原來的活動區間,也就是現在的空閑區間。事實上,在活動區間轉換為空閑區間的同時,垃圾對象已經被一次性全部回收了。

開始時:

在被GC線程處理後:

可以看到,1和4號對象被清楚了,而2,3,5,6號對象則是規則的排列在剛才的空閑區間,也就是現在的活動區間之間,此時左半部分已經變成空閑區間,然而,如中在下一次GC之後,左半部分再次變成活動區間。
顯然:
復制演算法缺點時非常明顯的:
1.直接浪費了一般的內存。
2.再就是加入對象存活率非常高,達到了極端的100%,那麼我們需要將所有的對象都復制一遍,並將所有引用地址重置一遍。復制這一工作所花費的時間,在對象存活率達到一定的程度時,將會變得不可忽視。
由此可見,復制演算法要想使用,最起碼對象的存活率要非常低才行,而且最重要的是,我們態悔必須要克服50%內存浪費。

標記整理演算法

分為兩個階段:
1.標記:遍歷GC roots,然後將存活的對象標記。
2.整理:移動所帆橡正有存活的對象,且按照內存地址次序依次排列,然後將末端內存地址以後的內存全部回收,這個階段才為整理階段。

它與GC 前後與復制演算法類似,只不過沒有了活動區間和空閑區間

倘若此時GC線程開始工作,那麼緊接著開始的就是標記階段了。此階段與標記/清除演算法的標記階段是一樣一樣的,我們看標記階段過後對象的狀態,如下圖。

接下來,便應該是整理階段了。我們來看當整理階段處理完以後,內存的布局是如何的,如下圖。

❸ JVM的垃圾演算法有哪幾種

一、垃圾收集器概述

如上圖所示,垃圾回收演算法一共有7個,3個屬於年輕代、三個屬於年老代,G1屬於橫跨年輕代和年老代的演算法。

JVM會從年輕代和年老代各選出一個演算法進行組合,連線表示哪些演算法可以組合使用

二、各個垃圾收集器說明

1、Serial(年輕代)

閱讀全文

與jvmgc演算法相關的資料

熱點內容
單片機測電感電容 瀏覽:165
android在子線程中更新ui 瀏覽:694
演算法分析師面試有什麼要求 瀏覽:994
容器演算法大全圖解 瀏覽:68
cad後置命令失效 瀏覽:692
殺手阻擊存檔文件夾是哪一個 瀏覽:212
禁書pdf 瀏覽:920
沒用app語音智能提醒怎麼設置 瀏覽:502
linuxwiki安裝 瀏覽:680
隔牆演算法 瀏覽:173
安卓手機為什麼app不通知 瀏覽:550
申請雲伺服器購買費用 瀏覽:115
雲伺服器鏡像下載到本地 瀏覽:4
電腦文件夾名有橫杠 瀏覽:154
無印良品壓縮紙膜 瀏覽:753
完全隨機演算法 瀏覽:31
怎麼看文件是否是日語解壓 瀏覽:353
電影打分python代碼 瀏覽:350
androidjni獲取簽名 瀏覽:111
解壓文件電腦上哪裡找 瀏覽:447