溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JVM中G1收集器有什么用

發(fā)布時間:2022-01-14 10:44:46 來源:億速云 閱讀:121 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹了JVM中G1收集器有什么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

首先看看G1收集器的內(nèi)存模型

JVM中G1收集器有什么用

一、GI收集器雖然也是分代收集器,但是在內(nèi)存結(jié)構(gòu)上卻和其他的收集器大相徑庭,從這里就可以看出G1是物理上的分區(qū),邏輯上的分代, G1不需要survivorTo做復制。

二、G1擁有Humongous區(qū),是存放巨型對象的區(qū)域,巨型對象是當一個區(qū)被占到一半以上,也會出現(xiàn)一個區(qū)都裝不下,這時候就會需要連續(xù)的多個分區(qū),尋找一個連續(xù)的內(nèi)存區(qū)間是很困難的,如果內(nèi)存不夠或許會造成Full GC。

首先談?wù)凜MS的缺點:

      1.由于并發(fā)進行,CMS在收集與應(yīng)用線程會同時會增加對堆內(nèi)存的占用,也就是說,CMS必須要在老年代堆內(nèi)存用盡之前完成垃圾回收,否則CMS回收失敗時,將觸發(fā)擔保機制,串行老年代收集器將會以STW(Stop-the-world)的方式進行一次GC,從而造成較大停頓時間;

      而在G1中,設(shè)計原則是"首先收集盡可能多的垃圾(Garbage First)",G1會優(yōu)先回收垃圾比例比較高得的區(qū)域,而不會等到內(nèi)存用盡得時候,但是當G1收集器非常忙的時候,內(nèi)存溢出,也會觸發(fā)擔保機制,就是使用serial old收集器進行一次Full GC。

      2.標記清除算法無法整理空間碎片,老年代空間會隨著應(yīng)用時長被逐步耗盡,最后將不得不通過擔保機制對堆內(nèi)存進行壓縮。CMS也提供了參數(shù)-XX:CMSFullGCsBeForeCompaction(默認0,即每次都進行內(nèi)存整理)來指定多少次CMS收集之后,進行一次壓縮的Full GC。

      G1不會產(chǎn)生內(nèi)存碎片,采用的是標志整理算法

再來看看G1的收集過程:

JVM中G1收集器有什么用

      初始標記:標記從根節(jié)點直接可達的對象。這個階段會伴隨一次新生代GC,它是會產(chǎn)生全局停頓的,應(yīng)用程序在這個階段必須停止執(zhí)行。

      根區(qū)域掃描:由于初始標記必然會伴隨一次新生代GC,所以在初始化標記后,eden被清空,并且存活對象被移到survivor區(qū)。在這個階段,將掃描由survivor區(qū)直接可達的老年代區(qū)域,并標記這些直接可達的對象。這個過程是可以和應(yīng)用程序并發(fā)執(zhí)行的。但是根區(qū)域掃描不能和新生代GC同時發(fā)生(因為根區(qū)域掃描依賴survivor區(qū)的對象,而新生代GC會修改這個區(qū)域),故如果恰巧此時需要新生代GC,GC就需要等待根區(qū)域掃描結(jié)束后才能進行,如果發(fā)生這種情況,這次新生代GC的時間就會延長。

      并發(fā)標記:和CMS類似,并發(fā)標記將會掃描并查找整個堆的存活對象,并做好標記。這是一個并發(fā)過程,并且這個過程可以被一次新生代GC打斷。

      重新標記:和CMS一樣,重新標記也是會使應(yīng)用程序停頓,由于在并發(fā)標記過程中,應(yīng)用程序依然運行,因此標記結(jié)果可能需要修正,所以在此階段對上一次標記進行補充。在G1中,這個過程使用SATB(Snapshot-At-The-Begining)算法完成,即G1會在標記之初為存活對象創(chuàng)建一個快照,這個快照有助于加速重新標記的速度。

      獨占清理:顧名思義,這個階段會引起停頓。它將計算各個區(qū)域的存活對象和GC回收比例并進行排序,識別可供混合回收的區(qū)域。在這個階段,還會更新記憶集。該階段給出了需要被混合回收的區(qū)域并進行了標記,在混合回收階段,需要這些信息。

      并發(fā)清理階段:識別并清理完全空閑的區(qū)域。它是并發(fā)的清理,不會引起停頓。

三色標記

提到并發(fā)標記,我們不得不了解并發(fā)標記的三色標記算法。它是描述追蹤式回收器的一種有用的方法,利用它可以推演回收器的正確性。

    首先,我們將對象分成三種類型的:

    黑色:跟對象或者該對象與它的子對象都被掃描(標記完成)。

    灰色:對象本身被標記完成,但是還沒有掃描完該對象中的子對象

    白色:未被掃描的對象?;蛘呤菕呙柰瓿珊?,最終白色對象為不可達對象即為垃圾對象。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“JVM中G1收集器有什么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

jvm
AI