🌈hello,你好鴨,我是Ethan,一名不斷學習的碼農,很高興你能來閱讀。
??目前博客主要更新Java系列、項目案例、計算機必學四件套等。
🏃人生之義,在于追求,不在成敗,勤通大道。加油呀!
🔥個人主頁:Ethan Yankang
🔥專欄:面試八股文||Java項目
🔥本篇概覽:詳細講解了G1垃圾回收器的工作原理
?
目錄
?3.6 詳細聊一下G1垃圾回收器
3.6.1 概述
3.6.2 Young Collection(年輕代垃圾回收)
3.6.3 Young Collection + Concurrent Mark (年輕代垃圾回收+并發標記)
3.6.4 Mixed Collection (混合垃圾回收)
3.6 詳細聊一下G1垃圾回收器
難易程度:☆☆☆☆
出現頻率:☆☆☆☆
3.6.1 概述
-
應用于新生代和老年代,在DK9之后默認使用G1
-
劃分成多個區域,每個區域都可以充當 eden,survivor,old, humongous,其中 humongous 專為大對象準備
-
采用復制算法
-
響應時間與吞吐量兼顧
-
分成三個階段:新生代回收、并發標記、混合收集
-
如果并發失敗(即回收速度趕不上創建新對象速度),會觸發 Full GC
3.6.2 Young Collection(年輕代垃圾回收)
-
初始時,所有區域都處于空閑狀態
-
創建了一些對象,挑出一些空閑區域作為伊甸園區存儲這些對象
-
當伊甸園需要垃圾回收時,挑出一個空閑區域作為幸存區,用復制算法復制存活對象,需要暫停用戶線程
-
隨著時間流逝,伊甸園的內存又有不足
-
將伊甸園以及之前幸存區中的存活對象,采用復制算法,復制到新的幸存區,其中較老對象晉升至老年代
3.6.3 Young Collection + Concurrent Mark (年輕代垃圾回收+并發標記)
當老年代占用內存超過閾值(默認是45%)后,觸發并發標記,這時無需暫停用戶線程
-
并發標記之后,會有重新標記階段解決漏標問題,此時需要暫停用戶線程。
-
這些都完成后就知道了老年代有哪些存活對象,隨后進入混合收集階段。此時不會對所有老年代區域進行回收,而是根據暫停時間目標優先回收價值高(存活對象少)的區域(這也是 Gabage First 名稱的由來)。
3.6.4 Mixed Collection (混合垃圾回收)
復制完成,內存得到釋放。進入下一輪的新生代回收、并發標記、混合收集
其中H叫做巨型對象,如果對象非常大,會開辟一塊連續的空間存儲巨型對象
💖💖💖???????💖???????💖???????💖???????💖???????💖???????💖???????💖💖💖💖💖???????💖???????💖???????💖???????💖??????
熱門專欄推薦
???????
🌈🌈計算機科學入門系列? ? ? ? ? ? ? ? ? ? ?關注走一波💕💕
🌈🌈CSAPP深入理解計算機原理? ? ? ??關注走一波💕💕
🌈🌈微服務項目之黑馬頭條? ? ? ? ? ? ? ?? 關注走一波💕💕
🌈🌈redis深度項目之黑馬點評? ? ? ? ? ??關注走一波💕💕
🌈🌈Java面試八股文系列專欄? ? ? ? ? ? 關注走一波💕💕
🌈🌈算法leetcode+劍指offer??? ? ? ? ? ? ?關注走一波💕💕
📣非常感謝你閱讀到這里,如果這篇文章對你有幫助,希望能留下你的點贊👍 關注? 分享👥 留言💬thanks!!!
📚愿大家都能學有所得,功不唐捐!