日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于 G1(Garbage First)垃圾收集器

發(fā)布時(shí)間:2024/1/18 编程问答 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于 G1(Garbage First)垃圾收集器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • G1收集器
    • 概念
    • 設(shè)計(jì)思路
    • 設(shè)計(jì)原理
    • 執(zhí)行步驟:

G1收集器

概念

G1(Garbage First)是一款主要面向服務(wù)端應(yīng)用的垃圾收集器,JDK 9發(fā)布之日,G1宣告取代ParallelScavenge加Parallel Old組合,成為服務(wù)端模式下的默認(rèn)垃圾收集器,而CMS則淪落至被聲明為不推薦使用(Deprecate)的收集器。

G1收集器是垃圾收集器技術(shù)發(fā)展歷史上的里程碑式的成果,它開(kāi)創(chuàng)了收集器面向局部收集的設(shè)計(jì)思路和基于Region的內(nèi)存布局形式。

設(shè)計(jì)思路

雖然G1也仍是遵循分代收集理論設(shè)計(jì)的,但其堆內(nèi)存的布局與其他收集器有非常明顯的差異:

  • G1不再堅(jiān)持固定大小以及固定數(shù)量的分代區(qū)域劃分,而是把連續(xù)的Java堆劃分為多個(gè)大小相等的獨(dú)立區(qū)域(Region),每一個(gè)Region都可以根據(jù)需要,扮演新生代的Eden空間、Survivor空間,或者老年代空間。

收集器能夠?qū)Π缪莶煌巧腞egion采用不同的策略去處理,這樣無(wú)論是新創(chuàng)建的對(duì)象還是已經(jīng)存活了一段時(shí)間、熬過(guò)多次收集的舊對(duì)象都能獲取很好的收集效果。

設(shè)計(jì)原理

Region中還有一類(lèi)特殊的Humongous區(qū)域,專(zhuān)門(mén)用來(lái)存儲(chǔ)大對(duì)象。G1認(rèn)為只要大小超過(guò)了一個(gè)Region容量一半的對(duì)象即可判定為大對(duì)象。

每個(gè)Region的大小可以通過(guò)參數(shù) -XX:G1HeapRegionSize設(shè)定,取值范圍為1MB~32MB,且應(yīng)為2的N次冪。

而對(duì)于那些超過(guò)了整個(gè)Region容量的超級(jí)大對(duì)象,將會(huì)被存放在N個(gè)連續(xù)的 Humongous Region 之中,G1的大多數(shù)行為都把 Humongous Region 作為老年代的一部分來(lái)進(jìn)行看待

如下圖所示:

雖然G1仍然保留新生代和老年代的概念,但新生代和老年代不再是固定的了,它們都是一系列區(qū)域(不需要連續(xù))的動(dòng)態(tài)集合。

G1收集器之所以能建立可預(yù)測(cè)的停頓時(shí)間模型,是因?yàn)樗鼘egion作為單次回收的最小單元,即每次收集到的內(nèi)存空間都是Region大小的整數(shù)倍,這樣可以有計(jì)劃地避免在整個(gè)Java堆中進(jìn)行全區(qū)域的垃圾收集。

更具體的處理思路是讓G1收集器去跟蹤各個(gè)Region里面的垃圾堆積的“價(jià)值”大小,價(jià)值即回收所獲得的空間大小以及回收所需時(shí)間的經(jīng)驗(yàn)值,然后在后臺(tái)維護(hù)一個(gè)優(yōu)先級(jí)列表,每次根據(jù)用戶設(shè)定允許的收集停頓時(shí)間(使用參數(shù)-XX:MaxGCPauseMillis指定,默認(rèn)值是200毫秒),優(yōu)先處理回收價(jià)值收益最大的那些Region,這也就是“Garbage First”名字的由來(lái)。這種使用Region劃分內(nèi)存空間,以及具有優(yōu)先級(jí)的區(qū)域回收方式,保證了G1收集器在有限的時(shí)間內(nèi)獲取盡可能高的收集效率。

執(zhí)行步驟:

如果我們不去計(jì)算用戶線程運(yùn)行過(guò)程中的動(dòng)作,G1收集器的運(yùn)作過(guò)程大致可劃分為以下四個(gè)步驟:

  • 初始標(biāo)記: 僅僅是標(biāo)記一些GC Roots能直接關(guān)聯(lián)到的對(duì)象,并且修改TAMS指針的值,讓下一階段用戶線程并發(fā)運(yùn)行時(shí),能正確地在可用的Region中分配新的對(duì)象。
  • 并發(fā)標(biāo)記: 從GC Roots開(kāi)始對(duì)堆中對(duì)象進(jìn)行可達(dá)性分析,遞歸掃描整個(gè)堆里的對(duì)象圖,找出要回收的對(duì)象,與用戶線程并發(fā)執(zhí)行。
  • 最終標(biāo)記: 對(duì)用戶線程做另一個(gè)短暫的暫停,用于處理并發(fā)階段結(jié)束后仍遺留下來(lái)的最后那少量的SATB記錄。
  • 篩選回收: 負(fù)責(zé)更新Region的統(tǒng)計(jì)數(shù)量,對(duì)各個(gè)Region進(jìn)行回收價(jià)值和成本排序,根據(jù)用戶期望的停頓時(shí)間制定回收計(jì)劃,然后把決定回收的那一部分Region的存活對(duì)象復(fù)制到空的Region中,再清理掉整個(gè)舊的Region的全部空間。

下面是G1收集器的運(yùn)行示意圖:

總結(jié)

以上是生活随笔為你收集整理的关于 G1(Garbage First)垃圾收集器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。