CMS 中 三色标记概述
CMS 清理流程
三色标记
概述
三色标记其实就是用三种颜色区分不同的内存区域。
- 黑色标记:自己已经标记,直接引用的对象区域已经标记
- 灰色标记:自己标记完成,但引用区域没来得及标记
- 白色标记:没有遍历到的区域,可以理解为没有标记
CMS在每次进行标记的时候。从根root广度优先遍历。第一次遍历根root最终被标记为黑色,且引用对象标记为灰色。
再次遍历时黑色区域引用区域也已经标记,则不会再次扫描标记,灰色区域需要进行扫描并最终标记为黑色区域。白色区域<未标记>的认为是垃圾,进行清理。
可能存在的问题已经解决
假设
A:一个黑色区域
B:一个灰色区域
C:一个白色区域<未被扫描>
浮动垃圾问题
概述
原本A引用B,但在A标记为黑色后,A对B的引用断开,没有指向B的引用后,B应该为白色区域,但已经标记灰色区域。这种情况,B第一次垃圾回收不会被回收,这种情况称为浮动垃圾
但是浮动垃圾并不会有实质性的影响,因为下次垃圾回收会重新标记,则会被回收。
漏标问题
概述
原本A引用B,B引用C,在A被标记为黑色后,A建立了指向C的引用,且B指向C的引用断开。此时A已经被标记为黑色,则不会再便利A的引用,且B对C的引用已经断开。这样会造成C未被标记,被垃圾回收,造成空指针问题。
解决方法:
CMS解决方式:
当发生A引用C<黑色对象指向了白色对象>的情况。此时将A标记为灰色。并且在全部标记结束后,会有一个remark阶段,必须从头扫描一遍。发生在重新标记阶段,所以在这个阶段必须STW。
G1解决方式 :
当发生B指向C的引用<指针>断开的时候。将这个引用<指针>记录在一个特定区域。垃圾回收线程在扫描的时候会查看这个区域的增量数据。发现有增量数据。会看C此时还有没有对象指向他,如果有则将区域C标记为灰色。否则不标记<视为可回收垃圾>。
CMS 中 三色标记概述相关推荐
- CMS与三色标记算法
文章目录 CMS收集器 CMS的缺点 三色标记算法 漏标 错标 原始快照和增量更新 写屏障 尾巴 CMS(Concurrent Mark Sweep)是一款里程碑式的垃圾收集器,为什么这么说呢?因为在 ...
- 说说关于JVM三色标记算法
本文来说下关于JVM三色标记算法 文章目录 概述 三色标记算法思想 算法流程 三色标记存在问题 解决办法 CMS回顾 CMS解决办法:增量更新 CMS另两个致命缺陷 G1回顾 G1前置知识 Card ...
- JVM 三色标记 增量更新 原始快照
2.1 基本算法 要找出存活对象,根据可达性分析,从GC Roots开始进行遍历访问,可达的则为存活对象: 最终结果:A/D/E/F/G 可达 我们把遍历对象图过程中遇到的对象,按"是否访问 ...
- JVM从入门到精通(十):垃圾回收算法串讲:CMS,G1,三色标记算法
CMS 并发回收,工作线程和GC线程同时进行,暂停时间短 老年代 分为 四个阶段: 初始标记:需要STW,因为初始的垃圾并不多,因此耗费的时间不长 并发标记:垃圾回收线程和工作线程同时执行.一边产生垃 ...
- JVM 的三色标记算法详解
本文来说下关于JVM 的三色标记算法. 文章目录 三色标记算法概述 引用计数&可达性分析 分代收集 什么是卡表 卡表的问题 写屏障 伪共享 三色标记算法 基本算法 三色标记算法缺陷 多标 漏标 ...
- 你对JVM三色标记的理解嘛?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 三色标记法是一种 ...
- JVM 调优 2:GC 如何判断对象是否为垃圾,三色标记算法应用原理及存在的问题?
文章目录 前言 一.如何判断一个对象是否为垃圾? 1.1.reference count(引用计数) 1.2.reference count(引用计数)存在的问题 二.Root Searching(根 ...
- 三色标记原理,我给应聘者问懵了...
本文分享自华为云社区<从三色标记说开去>,原文作者:java初中生. [1]关于三色标记 前几天,公司临时派我去面试一个java实习生,由于没有这方面的任何经验,于是一不小心,我就问超纲了 ...
- 三色标记(可达性分析算法)及一些思考
三色标记算法及一些思考 三色标记算法 并发下导致的问题 解决方式 最近,在阅读<深入理解Java虚拟机>一书关于可达性分析内容的描述后,有些感悟,故写下此文章. 首先,我们假设根节点已经枚 ...
最新文章
- batchsize设置为2的n次方_试卷中的页码设置
- GDCM:读取显式长度SQIVR的测试程序
- 树和二叉树的基本概念(二级)
- nginx日志中添加请求的response日志
- C# 11 中的参数 null 检查
- java 生成xml乱码_jdom解决中文乱码问题 JAVA生成xml文件帮了我很大的忙
- 北交大计算机学院复试经验,2014考研复试:过来人考研复试经验谈-北交大计算机系...
- mysql数据库导出导入设置编码
- 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.9
- Linux 如何将eth1网卡修改为eth0
- Axure中将不同文件页面合在同一个页面中
- 三星笔记文件存储路径_《那些年JavaWeb踩过的坑》ssh框架整合配置文件路径(错误笔记)...
- php 图片上传打印路径,php上传图片到指定位置路径保存到数据库的具体实现
- js各种for循环及性能比较
- ES的索引(倒排索引),文档,查询
- 计算机文件只读模式,电脑文件只读模式如何修改 – 手机爱问
- 一些基于 D3.js 的图表库
- 2019年BET公司面试题目大汇总
- win7系统没有计算机睡眠状态,win7旗舰版系统休眠模式和睡眠模式的区别
- 你知道CAD软件将圆弧与直线转换成多段线的方法吗?