JVM三色标记笔记

JVM-三色标记算法 JVM-三色标记算法 三色标记算法是一种垃圾回收的标记算法。它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器 所使用垃圾回收算法即为三色标记法。 三色标记过程: 黑色:代表该对象以及该对象下的属性全部被标记过了。(程序需要用到的对象,不应该被回收) 灰色:对象被标记了,但是该对象下的属性未被完全标记。(需要在该对象中寻找垃圾) 白色:对象未被标记(需要被清除的垃圾) 三色标记存在的问题: 对象漏标: 如果 阅读详情

一、三色标记之前JVM使用的什么算法?什么是三色标记?

1、 Mark-And-Sweep(标记清除)

实现原理: 标记初始时所有对象标记为 0,如果发现对象可达标记更新为 1,标记完成后将所有不可达对象(标记为0)清除,然后把所有对象标记重置为0方便下一次标记。

缺点
(1)标记时必须暂停整个程序
(2)不能进行异步操作
(3)标识 0 和 1不同阶段意义不同,新增对象很有可能被意外清除
(4)标记时间相对较长,系统不可接受

2、三色标记

优点
(1)可以异步执行
(2)中断时间短,不需要中断整个GC

三色含义

黑色:根对象,或本身与子对象都完成扫描
灰色:本身扫描完成,但是子对象未完成扫描
白色:未被扫描,或扫描完本身及子对象后不可达(垃圾对象)

二、漏标问题及解决办法


CMS解决方案 Incremental Update 算法(增量)

白色对象被黑色对象引用时,将黑色对象标记为灰色,让垃圾回收器重新扫描。

G1解决方案 SATB(snapshot-at-the-beginning)

我们在这个灰色对象取消对白色对象的引用之前,将这个引用记录下来,在最后标记的时候,再以这个引用指向的白色对象为根,对它的引用进行扫描

​ 可以简单理解为,当一个灰色对象取消了对白色对象的引用,那么这个白色对象被变灰

​ 这样做的缺点就是,这个白色对象有可能并没有黑色对象去引用它,但是它还是被变灰了,就会导致它和它的引用,本来应该被垃圾回收掉,但是此次GC存活了下来,就是所谓的浮动垃圾.其实这样是比较可以忍受的,只是让它多存活了一次GC而已,浪费一点点空间,但是会比增量更新更省时间.

「 JVM 」 图解三色标记算法(增量更新与原始快照的实现) 在说 JVM 的三色标记算法之前,我们先来说下 JVM 对于常见对象存活判定算法与垃圾收集算法。常见对象存活判定算法有引用计数算法和可达性分析算法。引用计数法会产生循环引用问题,JVM 默认是通过可达性分析算法来判断对象是否存活的。标记-清除、标记-复制、标记-整理算法以及在此基础上的分代收集算法(新生代/老年代),每代采取不同的回收算法,以提高整体的分配和回收效率。这些垃圾收集算法首先做的都是通过可达性分析算法。 阅读详情

相关推荐

高效静音黑科技 —— 单相直流无刷电机驱动器

然而,传统的BLDC电机驱动通常依赖于三相架构,电路复杂,成本高昂,且在低功率应用中显得有些“大材小用”。单相直流无刷电机驱动器作为一项高效、静音、经济的技术,正逐渐改变着各个领域的电机驱动方式。其精巧的控制策略、显著的优势以及广阔的应用前景,都预示着这项技术将在未来扮演越来越重要的角色。它相较于传统的三相驱动,显著简化了电路结构,降低了成本,尤其适用于低功率、对静音要求极高的应用场景。通过这些模块的协同工作,单相直流无刷电机驱动器能够实现对电机速度、扭矩的精确控制,并最大程度地降低噪声和振动。

wen8789的博客 1767

JAVA面试题分享五十九:JVM 中的三色标记法是什么?

GC 垃圾回收器其主要的目的是为了实现内存的回收,在这个过程中主要的两个步骤就是:内存标记,内存回收。三色标记法,主要是为了高效的标记可被回收的内存块。白色:表示对象尚未被垃圾收集器访问过。显然在可达性分析刚刚开始的阶段,所有的对象都是白色的,若在分析结束的阶段,仍然是白色的对象,即代表不可达。黑色:表示对象已经被垃圾收集器访问过,且这个对象的所有引用都已经扫描过。黑色的对象代 表已经扫描过,它是安全存活的,如果有其他对象引用指向了黑色对象,无须重新扫描一遍。

之乎者也·的博客 2520

哨兵1号后向散射系数土壤水分反演

打开之前预处理之后的VH和VV极化的后向散射系数转存的tiff文件。

所有专家都曾始于新手 3295

JVM-三色标记

三色标记算法是把Gc roots可达性分析遍历对象过程中遇到的对象, 分成三种颜色:黑色、灰色、白色

wssc63262的博客 1885

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

SDANet整体架构和模块Dynamic Channel Sparse Attention (DCSA):DCSA为Transformer块中的自注意力层。DCSA架构:样本级动态稀疏注意力:首次实现每个样本独立预测注意力稀疏度:通过轻量门控网络根据输入特征的复杂度自适应调整保留的通道数,简单样本使用更高稀疏度(如保留 20% 通道),复杂样本使用更低稀疏度(如保留 80% 通道),在保证精度的前提下平均计算量降低 50% 以上。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 112

2026最新YOLO26改进:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

针对YOLO26模型改进痛点,本专栏整理200+实战验证方法,覆盖卷积层、注意力机制等核心模块。 每种方法含原理、性能分析、改进路径及实操流程,代码可直接运行,快速提升模型效果,性价比超高。

魔改工程师的博客 1万+

JVM垃圾回收——三色标记法

在CMS、G1这种并发的垃圾收集器收集对象时,假如一个对象A被GC线程标记为不可达对象,但是用户线程又将A对象标记为可达对象,那么此时直接对A对象做清除时那将会发生很严重的错误,那么对象A是如何摆脱被清除的命运呢?今天就简单来聊聊这个问题。

weixin_39555954的博客 6634

用 ABAP LSMW 的 Standard Batch / Direct Input 稳准快迁移物料主数据:从 MM01 录制到 RMDATIND 直入的落地指南

本文详细介绍了SAP数据迁移中LSMW工具的使用方法,重点分析了物料主数据迁移的两种主要路径:Batch Input Recording和Standard Batch/Direct Input。前者通过录制事务操作实现快速起步,后者通过调用预置接口程序实现稳定高效的批量处理。文章深入解析了Standard Direct Input的具体实施步骤,包括对象属性设置、源结构定义、字段映射规则等关键环节,并特别强调了迁移前的准备工作(如编号策略、视图策略等)对项目成功的重要性。通过对比两种方法的优缺点,为不同业务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 155

关于GC的三色标记算法的详细介绍

摘要:三色标记算法是JVM垃圾回收的核心技术,通过将对象分为白、灰、黑三色实现并发标记。白色为未标记对象,灰色为正在标记对象,黑色为完全标记对象。执行过程包括初始标记(暂停应用线程)、并发标记(与应用线程并发)、重新标记(短暂暂停)和垃圾清理。该算法解决了传统标记-清除无法并发的问题,但仍存在浮动垃圾(误标存活对象)和漏标(误删存活对象)的挑战,需通过读写屏障技术处理。三色标记显著减少了GC停顿时间,提升了应用性能。

weixin_50055999的博客 1752

从零开始学习PX4源码20(遥控器模式切换如何执行)

本节主要学习PX4的手动遥控器切换模式,具体是如何实现的,具体改变了哪些变量,和模式管理有什么联系。

陌城烟雨 318

数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践

Python实现模糊AHP(Fuzzy AHP)

全栈川川 1542

JVM实战:三色标记法

垃圾回收流程的一些流程 哪些对象是垃圾? 当我们进行垃圾回收的时候,首先需要判断哪些对象是存活的? 常用的方法有如下两种 引用计数法 可达性分析法 Python判断对象存活的算法用的是引用计数法,而Java则使用的是可达性分析法。 通过GC ROOT可达的对象,不能被回收,不可达的对象则可以被回收,搜索走过的路径叫做引用链 不可达对象会进行2次标记的过程,通过GC ROOT不可达,会被第一次标记。如果需要执行finalize()方法,则这个对象会被放入一个队列中执行finalize(),如果在fina.

小识的博客 1994

GitHub霸榜神器!NextChat领衔DeepSeek全栈开发范式

NextChat(原ChatGPT-Next-Web)是GitHub上斩获81.2K星标的现象级开源项目,定位为"轻量级AI助手终端",支持DeepSeek、Claude、GPT-4、Gemini等20+主流大模型。• 原生集成DeepSeek、GPT-4、Gemini Pro等模型API,同时兼容RWKV-Runner、LocalAI等自建模型框架,通过环境变量。• 客户端体积仅5MB(Windows安装包约6MB),采用PWA渐进式Web应用技术,首屏加载速度优化至100KB级,老旧设备亦可流畅运行。

实战AI智能体 899

JVM学习笔记(三)——三色标记

三色标记简介

孙志南的博客 934

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JVM学习笔记25-G1垃圾收集器三色标记算法和SATB

1三色标记算法 对于并发标记,我们不得不了解并发标记的三色标算法 它是描述追踪式回收器的一种有效方法,利用它可以推演回收器的正确性 我们将对象分成三种类型: 黑色—根对象, 或者该对象与它的子对象都被扫描过(对象被标记了,且它的所有field都被标记完了) 灰色—对象本身被扫描,但还没扫描完该对象中的子对象(它的field还没有被标记或标记完) 白色—未被扫描对象,扫描完成所有对象之后,最终为白...

lu322313的博客 2378

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jvm学习笔记

说到jvm,就很容易想到jdk,jre,jvm,众所周知,jre是java运行环境,jdk是java开发工具,而jvm是java虚拟机,是运行java应用,可以跨平台的。对象头mark word:存储对象运行时的数据,比如所类型,对象年龄代,hash值,线程持有的锁,线程id等。数组长度:如果对象不是数组类型的话,则没有这部分。指针类型:指向元空间类信息的指针,jvm通过它来确定该对象时哪个类的实例。实例数据就是对象里的字段和存储的值,包括从父类继承的字段和自身的字段对齐填充。

yuayu123的博客 1757

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JVM笔记(三)垃圾收集算法以及HotSpot的算法实现(安全点、记忆集与卡表、写屏障、三色标记等)

目录一、垃圾收集算法1.1 堆的布局1.2 GC类型1.2.1 Minor GC流程1.2.2 分配担保1.3 内存分配策略二、垃圾收集算法2.1 标记-清除算法2.2 标记-复制算法2.3 标记-整理算法三、HotSpot的算法细节实现3.1 根节点枚举3.2 安全点如何在垃圾收集时让所有线程跑到最近的安全点停顿下来3.3 安全区域原理3.4 记忆集与卡表3.4.1 记忆集的实现卡表3.5 写屏...

一颗小陨石的博客 2911

JVM 三色标记算法

三色标记算法是一种用于JVM垃圾回收的增量式标记算法,它将Java堆中的对象划分为白色、灰色和黑色三种颜色,分别表示未标记对象、部分标记对象和已完全标记对象。这算法被广泛应用于CMS(Concurrent Mark-Sweep)和G1(Garbage-First)等垃圾回收器中,以在GC标记和清理阶段尽量减少Stop-The-World(STW)的时间,提高系统的响应性。总体而言,三色标记算法通过增量标记的方式,尽量避免全局性的STW,提高了垃圾回收的并发性,但也需要处理漏标问题。

zhexiao 1632

JVM垃圾回收-三色标记

🎈现代大多数跟踪垃圾收集器(如CMS、G1、Shenandoah)都实现三色标记☘抽象的一些变体来对“垃圾”进行标记的。之所以都选择三色标记✨✨✨是因为它能够解决或者降低用户线程的停顿时间🍋。

田埂、の技术博客 1026

阿里二面:JVM 的三色标记算法你了解吗?

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 一、前言 不得不说阿里的面试还是挺有质量的,这个问题直接问到了 JVM 的底层算法实现。在说 JVM 的三色标记算法之前,我们先来说下 JVM 对于常见对象存活判定算法与垃圾收集算法。常见对象存活判定算法有引用计数算法和可达性分析算法。 引用计数法会产生循环引用问题,JVM 默认是通过可达性分析算法来判断对象是否存活的。而那些垃圾收集算法:标记-清除、标记-复制、标记-.

riemann_的博客 1785

JVM 的三色标记算法详解

本文来说下关于JVM 的三色标记算法。 文章目录概述 概述

wh柒八九的博客 1339

JVM:三色标记法详解

三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的所使用垃圾回收算法即为三色标记法。

2301_76166241的博客 2527

说说关于JVM三色标记算法

本文来说下关于JVM三色标记算法 文章目录概述 概述 三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目。

wh柒八九的博客 1124

浅谈JVM GC三色标记算法

浅谈JVM GC三色标记算法 “同学,可以讲一下JVM的GC三色标记算法吗?” “额……这个……这是啥……不了解” 这几天逛脉脉,有的网友提到面试的时候面试官问到了JVM GC的三色标记算法,好吧,看来Java面试真的已经是卷的飞起来,都开始问这种问题了…… 那么今天,我们就来简单聊聊JVM的GC三色标记算法。 三色标记算法 三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。 三色标记可以简洁地描述回收过程中对象状态的变

wtopps的专栏 2074

JVM三色标记

转载自:https://mp.weixin.qq.com/s/01V4wDOmlodnR4mLpZrm8A 三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器所使用垃圾回收算法即为三色标记法。 三色标记算法思想 三色标记法将对象的颜色分为了黑、灰、白,三种颜色。 白色:该对象没有被标记过。(对象垃圾) 灰色:该对象已经被标记过了,但该对象下的属性没有全被标记完。(GC需要从此对象中去寻找垃圾

ZERO 423

带颜色的JVM:三色标记详解

三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器所使用垃圾回收算法即为三色标记法。 三色标记算法思想 三色标记法将对象的颜色分为了黑、灰、白,三种颜色。 白色:该对象没有被标记过。(对象垃圾) 灰色:该对象已经被标记过了,但该对象下的属性没有全被标记完。(GC需要从此对象中去寻找垃圾) 黑色:该对象已经被标记过了,且该对象下的属性也全部都被标记过了。(程序所需要的对象) i

我要做最咸的那条鱼 3454
上一篇: gradle+idea配置阅读Spring源码开发环境(解决jar包下载缓慢问题)
下一篇: localhost和127.0.0.1的区别
小亮彡
博客等级 码龄7年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值