三色標記算法

? ? ? ?在 JVM 并發垃圾收集(GC)中,三色標記算法是實現 “GC 線程與用戶線程并行執行” 的關鍵技術,它解決了并發場景下 “如何準確標記存活對象” 的核心問題,是 CMS、G1 等現代收集器的底層基礎。

一、三色標記的核心:三種顏色的定義與狀態

算法通過 “顏色” 標記對象的標記階段和存活狀態,共三種顏色,對應不同角色:

顏色名稱核心定義
白色未標記初始狀態,對象尚未被 GC 線程訪問。標記結束后仍為白色,判定為 “死亡對象”(可回收)。
灰色待處理對象已被 GC 線程訪問,但該對象的所有子引用尚未遍歷(后續需繼續處理子對象)。
黑色已處理對象已被 GC 線程訪問,且該對象的所有子引用都已遍歷完成(后續無需再處理)。

二、并發標記的核心問題:漏標與錯標

并發標記時,用戶線程會修改對象引用關系,導致兩種關鍵問題,其中漏標是必須解決的致命錯誤

1. 漏標(Missing Mark):存活對象被誤判為死亡

  • 觸發場景:白色對象(未標記)被黑色對象(已處理,不再遍歷)引用,且原引用它的灰色對象(待處理)的引用被刪除。
  • 危害:漏標會導致存活對象被錯誤回收,直接引發空指針異常,是致命問題。

2. 錯標(False Mark):死亡對象被誤判為存活

  • 觸發場景:本應死亡的白色對象,被其他白色對象新增引用,導致標記結束后被誤判為存活。
  • 影響:僅造成暫時內存泄漏,后續 GC 會重新判斷并回收,屬于可接受的誤差。

三、解決漏標的兩大方案

工業界通過兩種成熟方案避免漏標,核心思路是 “記錄關鍵引用變更,確保白色對象被正確標記”:

1. 增量更新(Incremental Update):記錄新增引用

  • 核心邏輯:當黑色對象(已處理)新增對白色對象的引用時,通過 “寫屏障” 記錄該引用,后續重新遍歷這個白色對象。
  • 通俗理解:黑色對象不能 “偷偷” 引用白色對象,所有新增引用必須 “報備”,確保白色對象被標記。
  • 應用:CMS 收集器采用此方案,在 “重新標記” 階段(短暫 STW)遍歷記錄的引用,修正標記。

2. 原始快照(SATB):記錄刪除引用

  • 核心邏輯:當灰色對象(待處理)刪除對白色對象的引用時,通過 “寫屏障” 記錄該刪除的引用(視為 “快照”),后續仍會遍歷這個白色對象。
  • 通俗理解:灰色對象刪除的引用要 “記下來”,即使引用沒了,也要確保白色對象不會漏標。
  • 應用:G1 收集器采用此方案,在 “最終標記” 階段(短暫 STW)處理快照引用,修正結果。

四、總結

三色標記算法通過 “顏色劃分對象狀態”,解決了并發 GC 的標記準確性問題:

  1. 三種顏色清晰界定對象的 “未標記 - 待處理 - 已處理” 狀態;
  2. 漏標是致命問題,需通過增量更新(CMS 用)或原始快照(G1 用)解決;
  3. 錯標影響較小,可通過后續 GC 彌補。

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

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

相關文章

OpenStack 管理與基礎操作學習筆記(一):角色、用戶及項目管理實踐

OpenStack實驗 OpenStack命令 admin-openrc.sh 進入管理員視圖查看當前 OpenStack 中的項目列表,驗證是否已經登錄成功切換用戶 修改文件切換用戶上傳文件切換用戶OpenStack 認證管理 實驗介紹 通過 OpenStack Dashboard 和 OpenStack CLI 兩種方式創建角色、用戶、…

直接查找試卷且可以免費下載

有什么網站可以直接查找試卷且可以免費下載? SearXNG開源元搜索引擎 This website shows the SearXNG public instances searx一個可定制的搜索引擎 分享一個基于Blockstack的DApp-searx,一個可定制的搜索引擎。 1- 鏈接 官網地址:https://searx.worl…

【獨立版】智創云享知識付費小程序 v5.0.23+小程序 搭建教程

介紹智創云享知識付費小程序v5.0.23 含PC、小程序、H5 、前端,系統獨立版已修復已知bug問題。框架是一款基于ThinkPHP框架開發的虛擬資源知識付費小程序,為廣大創業者、自媒體及培訓機構提供知識付費、內容付費、資源變現等領域的行業解決方案&#xff1…

布爾運算-區間dp

面試題 08.14. 布爾運算 - 力扣(LeetCode) Solution 這題的思路比較直接,就是枚舉最后一個進行計算的運算符,但是在實現過程中需要注意,定義范式f(l,r)表示l到r范圍,l和r必須為數字,l1,r-1為運…

MyBatis-Plus 擴展全局方法

1.文件內容package com.ruoyi.business.mybatisplus.base;import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** 擴展的 Service 接口* 所有自定義 Service 接口都需要繼承此接口…

13.Linux OpenSSH 服務管理

文章目錄Linux OpenSSH 服務管理環境準備OpenSSH 服務介紹SSH 介紹SSH 建立連接的過程加密類型雙向加密過程使用 ssh 訪問遠端CLIssh 工具演示ssh工具配置文件配置 ssh 密鑰認證ssh 故障模擬故障模擬排故故障自定義 SSH 服務配置文件禁止 root 登錄禁止密碼登錄只允許特定用戶登…

速通ACM省銅第五天 賦源碼(MEX Count)

目錄 引言: MEX Count 題意分析 邏輯梳理 代碼實現 結語: 引言: 本來,今天我是想著出倆題或三題題解的,但是在打第一題的時候就天塌了,導致今天就只搓了一道題,這題的難度在CF中為1300的水準&…

【數據結構與算法-Day 27】堆的應用:從堆排序到 Top K 問題,一文徹底搞定!

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

企業即時通訊保障企業通訊安全,提升企業部門協作效率

在當今數字化轉型的大潮中,企業即時通訊軟件已從單純的溝通工具,逐步演變為保障企業數據安全的核心基礎設施。吱吱企業即時通訊軟件通過“私有化部署全流程加密”的雙重機制,為企業構建了一套集“通訊安全”與“部門協作”于一體的數字化解決…

《華為變革法:打造可持續進步的組織》讀書筆記

推薦序一:變革是企業活下去的基礎(胡彥平)華為前常務副總裁、變革指導委員會成員胡彥平在序言中強調,企業存續的核心命題是應對不確定性,而變革能力是破解這一命題的唯一答案。他以華為 30 余年的發展歷程為例&#xf…

第二篇:排序算法的簡單認識【數據結構入門】

排序算法的分類標準 時間復雜度分類 a. 簡單排序算法:時間復雜度O(n),冒泡排序、選擇排序、插入排序; b. 高級排序算法:時間復雜度O(n logn),快速排序、歸并排序、堆排序; c. 線性排序算法:時間…

快速掌握Dify+Chrome MCP:打造網頁操控AI助手

你是否曾經希望那些強大的開源大模型能更貼合你的專業領域,或者學會模仿你的行文風格?其實,實現這個目標的關鍵就在于“微調”。曾幾何時,微調模型是大公司的專屬游戲——動不動就需要幾十張GPU和復雜的分布式訓練技術。 而現在&…

單詞記憶-輕松記憶10個實用英語單詞(15)

1. repaint含義:重新油漆 讀音標注:/?ri??pe?nt/ 例句:We need to repaint the walls after the repairs. 譯文:修理完成后需要重新粉刷墻壁。 衍生含義:重新繪制(圖像場景);翻新…

visual studio快捷鍵

1.visual studio代碼格式化快捷鍵 1.CtrlA(全選) 2.CtrlK 3.CtrlF2.多行注釋 1.Ctrlk 2.Ctrlc2.多行取消注釋 1.Ctrlk 2.Ctrlu

Django全棧班v1.04 Python基礎語法 20250913 下午

練習:個人信息收集器 任務:創建一個個人信息收集和展示程序 要求: 收集用戶的姓名,年齡,城市,愛好驗證年齡輸入,必須是正數格式化輸出用戶信息計算用戶出生年份 name input("請輸入姓名&a…

學習海康VisionMaster之字符缺陷檢測

前言:差不多三個月沒更新了,天天碼代碼,實在是太忙了,有時候也在想這么忙到底是不是工作方法的問題,怎么樣才能變成大師呢! 一:進一步學習 今天學習下VisionMaster中的字符缺陷檢測&#xff1…

若依4.8.1打包war后在Tomcat無法運行,404報錯的一個解決方法

背景 最近使用若依4.8.1進行二次開發,接著嘗試打包成war包進行部署,結果出現了404,提示“HTTP狀態 404 - 未找到,請求的資源[/ruoyi-admin/]不可用”,翻了網上的教程,包括看了官方的解疑都沒有說到該情況。…

華清遠見25072班網絡編程學習day6

重點內容:數據庫基本概念:數據(Data):能夠輸入計算機并能被計算機程序識別和處理的信息集合數據 (Database)數據庫是在數據庫管理系統管理和控制之下,存放在存儲介質上的數據集合重要概念&#…

機器學習-網絡架構搜索

Neural Architecture Search(NAS) 一個神經網絡有不同類型的超參數 拓撲結構:resnet,mobilenet 單獨層:核大小,卷積層的通道,輸出隱藏單元的個數NAS自動設計神經網絡 如何設計搜索空間 如何探索…

云手機在辦公領域中自動化的應用

云手機在辦公自動化領域正逐漸展現出強大的潛力,以下是其在辦公中自動化應用的多方面介紹:企業借助云手機搭載的辦公軟件,可實現文檔處理自動化,對于重復性文檔任務,如制作每月固定格式的銷售報告、財務報表等&#xf…