G1 垃圾回收算法詳解

目錄

  1. 簡介

  2. G1 GC 的設計目標

  3. 內存結構

  4. 回收過程

    • 初始標記(Initial Mark)
    • 并發標記(Concurrent Mark)
    • 最終標記(Final Mark / Remark)
    • 篩選回收(Cleanup / Evacuation)
  5. 混合回收(Mixed GC)

  6. 與其他 GC 的比較

  7. 優缺點

  8. 調優建議

  9. 總結


簡介

G1(Garbage-First)是一種服務于 多核、大內存、低延遲 應用場景的 服務器端垃圾收集器,自 JDK 9 起成為默認 GC。其主要目標是以可預測的停頓時間來實現高吞吐量。


G1 GC 的設計目標

  • 可預測的 GC 停頓時間(如 <200ms
  • 減少 Full GC 的頻率
  • 高吞吐量與低延遲的平衡
  • 并行與并發執行,提高 CPU 利用率

內存結構

G1 GC 將堆劃分為多個等大小的 Region(區域),每個 Region 大小為 1MB 到 32MB(默認 4MB),總數不超過 2048。

  • 年輕代(Young Generation):包含 Eden 和 Survivor 區域,分布在多個 Region 中
  • 老年代(Old Generation):由存活對象多次晉升后形成
  • Humongous Region:用于存放大對象(大于一個 Region 的一半)
+------------------------------------------------------+
|                      Java Heap                       |
| +-----------+  +-----------+  +-----------+          |
| |  Eden     |  | Survivor  |  |  Old Gen  |   ...     |
| |  Region   |  |  Region   |  |  Region   |           |
| +-----------+  +-----------+  +-----------+           |
+------------------------------------------------------+

回收過程

G1 的 GC 過程主要分為以下階段:

初始標記(Initial Mark)

  • 標記從 GC Roots 可達的對象
  • 只處理 Eden 區中的新對象引用
  • 與 Minor GC 一起發生(STW)

并發標記(Concurrent Mark)

  • 并發執行,不會暫停應用線程
  • 遍歷整個堆中的對象圖,識別存活對象
  • 構建每個 Region 的存活率統計信息

最終標記(Final Mark / Remark)

  • STW 階段
  • 補充并發標記過程中遺漏的變更
  • 采用 SATB(Snapshot-At-The-Beginning)寫屏障

篩選回收(Cleanup / Evacuation)

  • 選出回收價值高的 Region 進行回收(依據回收成本與收益)
  • 將存活對象移動(Evacuation)到其他 Region
  • 回收原 Region,形成空 Region

混合回收(Mixed GC)

在 Full GC 之前,G1 會執行 Mixed GC

  • 回收部分 Old Region + 所有 Young Region
  • 并非一次完成,分多次 Mixed GC 執行,降低單次停頓時間
  • 策略性選擇回收的 Old Region

與其他 GC 的比較

特性CMSG1 GCZGC/ Shenandoah
并發標記
并發清理有(只處理部分 Region)
Region 化否(分代)是(統一 Region)
停頓時間不可預測可預測極低停頓
吞吐量
優化目標響應性響應性 + 吞吐量極低延遲

優缺點

優點

  • 可預測的 GC 停頓時間
  • 更高的并發度與吞吐量
  • 減少 Full GC 發生頻率
  • 自動調整回收策略

缺點

  • 配置復雜度略高
  • 對大對象的處理仍不理想(Humongous Objects)
  • 初期占用 CPU 多,可能影響響應性

調優建議

  • 設置最大停頓時間目標:

    -XX:MaxGCPauseMillis=200
    
  • 啟用 G1 GC:

    -XX:+UseG1GC
    
  • 控制堆內存大小:

    -Xms4g -Xmx4g
    
  • 限制 Humongous 對象產生,使用對象池

  • 監控指標:

    • gc.pause
    • gc.alloc.rate
    • gc.live.data.size
    • gc.heap.size

總結

G1 GC 是一款結合了 吞吐量、低延遲、可預測停頓 特性的現代垃圾回收器,非常適合服務端、大型 Java 應用。它通過 Region 化設計、分階段回收與混合策略,達成了響應性和高效性的平衡。

在對 GC 行為有更高可控需求的場景下,G1 是比 CMS 更優秀的選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90790.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90790.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90790.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaEE多線程——鎖策略 CAS synchronized優化

目錄前言1.鎖策略1.1 樂觀鎖和悲觀鎖1.2 重量級鎖和輕量級鎖1.3 掛起等待鎖和自旋鎖1.4 公平鎖和非公平鎖1.5 可重入鎖和不可重入鎖1.6 讀寫鎖2.CAS2.1 CAS的應用2.2 CAS的ABA問題3.synchronized優化3.1鎖升級3.2鎖消除3.3鎖粗化總結前言 本篇文章主要介紹多線程中鎖策略、CAS…

Windows符號鏈接解決vscode和pycharm占用C盤空間太大的問題

Windows符號鏈接解決vscode和pycharm占用C盤空間太大的問題 參考文章&#xff1a;Windows符號鏈接 1、找到vscode和pycharm在C盤的緩存文件夾。 C:\Users\用戶名\AppData\Roaming\Code C:\Users\用戶名\.vscode\extensionsC:\Users\用戶名\AppData\Local\JetBrains C:\Users…

賦能家庭、行業與工業場景,智微智能新一代Twin Lake 全棧智能終端發布

在數字化浪潮席卷全球的今天&#xff0c;智能終端已成為連接物理世界與數字世界的核心樞紐。智微智能基于Intel Twin Lake平臺&#xff0c;推出覆蓋家庭/行業應用及工業物聯網的全場景產品矩陣&#xff0c;為不同場景下的用戶提供高效、可靠的產品和解決方案。Intel Twin Lake架…

復習筆記 31

前言 好好復習。今天距離考研初試還剩一百六十一天。我的時間其實沒剩多少了呀。我得好好加油。 歸并排序 #include<algorithm> #include<iostream>using namespace std;const int N 100010; int n; int a[N], tmp[N];void merge ( int a[], int l, int r ) {if (…

el-tree 懶加載 loadNode

el-tree 是 Element UI 提供的樹形組件&#xff0c;其懶加載功能通過 loadNode 方法實現&#xff0c;可以在用戶展開節點時動態加載子節點數據&#xff0c;避免一次性加載大量數據。下面介紹 loadNode 的具體用法和示例。基本用法loadNode 是 el-tree 的一個重要屬性&#xff0…

【機器學習入門巨詳細】(研0版)二創OPEN MLSYS

自學機器學習&#xff0c;從入門到精通導論機器學習的基本框架設計目標機器學習框架基本組成原理機器學習生態機器學習工作流環境配置數據處理模型定義損失函數和優化器訓練及保存模型測試及驗證模型定義深度神經網絡以層為核心定義神經網絡神經網絡層實現原理自定義神經網絡層…

Excel 轉 JSON by WTSolutions API 文檔

Excel 轉 JSON by WTSolutions API 文檔 簡介 Excel 轉 JSON API 提供了一種簡單的方式將 Excel 和 CSV 數據轉換為 JSON 格式。該 API 接受制表符分隔或逗號分隔的文本數據&#xff0c;并返回結構化的 JSON。 接口端點 POST https://mcp.wtsolutions.cn/excel-to-json-api 請求…

git版本發布

cvs和svn都是集中式版本控制系統,而git是分布式版本控制系統。 1、集中式版本控制系統必須聯網才能工作&#xff0c;如果在局域網內還好&#xff0c;帶寬夠大&#xff0c;速度夠快&#xff0c;可如果在互聯網上&#xff0c;遇到網速慢的話&#xff0c;呵呵。分布式版本控制系統…

138-EMD-KPCA-CPO-CNN-BiGRU-Attention模型!

138-EMD-KPCA-CPO-CNN-BiGRU-Attention基于經驗模態分解和核主成分分析的長短期記憶網絡改進多維時間序列預測MATLAB代碼&#xff01;其中&#xff08;含CPO-CNN-BiGRU-attention、EMD-CPO-CNN-BiGRU-Attention、EMD-KPCA-CPO-CNN-BiGRU-Attention三個模型的對比&#xff09; 可…

系統思考:多元勝過能力

系統思考&#xff1a;從整體出發&#xff0c;打破瓶頸&#xff0c;擁抱多元 我們是否曾經陷入過這樣的困境&#xff1f; 1、專注能力提升&#xff0c;卻無法突破瓶頸&#xff1a;我和團隊日復一日地努力提升個人能力&#xff0c;投入無數時間和精力&#xff0c;但始終無法打破現…

qt樣式整合持續更新中(實測有效的)

// 僅顯示上邊框 一般可以作為直線使用 border-top: 2px solid black; //畫虛線 border-bottom: 2px dashed white; //單個圓角 border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; //透明背景 background:rgba(0,0,0,0); //設置字體 font:15pt; //給button設置…

[java][springboot]@PostConstruct的介紹和用法

在 Spring Boot&#xff08;以及整個 Spring Framework&#xff09;中&#xff0c;PostConstruct 是一個非常常用的注解&#xff0c;用于在 依賴注入完成后 執行一些初始化操作。import jakarta.annotation.PostConstruct; import org.springframework.stereotype.Component;Co…

Leaflet面試題及答案(41-60)

查看本專欄目錄 文章目錄 ?? 面試問題及答案(41-60)41. 如何判斷某個點是否在地圖可視區域內?42. 如何動態更新 Marker 位置?43. 如何清除地圖上的所有圖層?44. 如何保存地圖截圖?45. 如何檢測瀏覽器是否支持觸摸?46. Leaflet 是否支持 TypeScript?47. 如何修改默認圖…

Redis事件機制

Redis 采用事件驅動機制來處理大量的網絡IO。它并沒有使用 libevent 或者 libev 這樣的成熟開源方案&#xff0c;而是自己實現一個非常簡潔的事件驅動庫 ae_event。事件機制Redis中的事件驅動庫只關注網絡IO&#xff0c;以及定時器。該事件庫處理下面兩類事件&#xff1a;文件事…

Linux基礎開發工具

目錄 1.寫在前面 2.權限 3.file命令 4.基礎開發工具 1.軟件包管理器 5.編輯器vim 1.寫在前面 我們在上一講解中講解了權限是人事物屬性&#xff0c;還知道了擁有者所屬組其他人這三個概念&#xff0c;知道了33一組&#xff0c;rwx分別代表什么。那么下面我們繼續進行權限…

ICCV2025 特征點檢測 圖像匹配 RIPE

目測對剛性物體效果比較好代碼&#xff1a;https://github.com/fraunhoferhhi/RIPE 論文&#xff1a;https://arxiv.org/abs/2507.04839import cv2 import kornia.feature as KF import kornia.geometry as KG import matplotlib.pyplot as plt import numpy as np import torc…

Ubuntu22.0.4安裝PaddleNLP

Ubuntu22.0.4安裝PaddleNLP環境說明安裝底層框架Paddle安裝PddleNLP1. pip安裝2. 驗證安裝3. 最后問題集錦環境說明 1. miniconda 25.5.1 2. python 3.12.11 3. pip 25.1 4. nvidia 570.144 5. cuda 12.8**注意&#xff1a;**安裝過程可能遇到的一些問題&#xff0c;參考末尾的…

【HTTP服務端】Cookie?Session?Token?

文章目錄cookie與sessiontoken什么是JWT&#xff1f;JWT的組成結構1. Header&#xff08;頭部&#xff09;2. Payload&#xff08;負載&#xff09;3. Signature&#xff08;簽名&#xff09;JWT工作原理JWT的特點安全注意事項cookie與session cookie有哪些屬性 鍵值對&#xf…

安裝Git

Git安裝避坑指南技術 操作系統選擇與準備 Windows用戶需注意系統版本兼容性&#xff0c;建議使用Windows 10及以上版本 Mac用戶需檢查是否安裝Xcode Command Line Tools Linux用戶需區分apt/yum等包管理器命令差異 安裝包下載注意事項 從官方渠道&#xff08;git-scm.com&a…

UDP服務器的優缺點都包含哪些?

UDP協議不需要像TCP協議那樣進行復雜的連接建立與拆除過程&#xff0c;在進行傳輸數據信息的過程中&#xff0c;應用層將數據交給UDP層&#xff0c;UDP層直接加上首部就發往網絡層&#xff0c;極大地減少了處理時間和資源消耗。例如在一些簡單的網絡監控程序中&#xff0c;只是…