大厂面试题-JVM中的三色标记法是什么?

目录

问题分析

问题答案


题分析

三色标记法是Java虚拟机(JVM)中垃圾回收算法的一种,主要用来标记内存中存活和需要回收的对象。

它的好处是,可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的,JVM中的「CMS、G1垃圾回收器」都用到了三色标记法。

下面来看一下这个问题的解答。

题答案

在三色标记法中,Java虚拟机将内存中的对象分为三个颜色:

  1. 白色:表示还没有被垃圾回收器扫描的对象;

  2. 黑色:表示已经被垃圾回收器扫描过,且对象及其引用的其他对象都是存活的;

  3. 灰色:表示已经被垃圾回收器扫描过,但对象引用的其他对象尚未被扫描。

在GC开始时(如图),先将所有对象都标记为白色,然后从根对象开始遍历内存中的对象,接着把直接引用的对象标记为灰色。

再判断灰色集合中的对象是否存在子引用,不存在咋放入黑色集合,如果存在,就把子引用对象放入到灰色集合。

按照这样一个步骤不断推导,直到灰色集合中所有的对象变黑后,本轮标记完成。最后,还处于白色标记的对象就是不可达对象,可以直接被回收。

相关推荐
baidu_34099882几秒前
JavaScript中函数式编程中不可变性与闭包的关联
jvm·数据库·python
SamDeepThinking2 分钟前
学数据结构到底有什么用
java·后端·面试
djjdjdjdjjdj3 分钟前
c++如何利用std--tie实现多个文件属性字段的快速比较排序【详解】
jvm·数据库·python
m0_678485459 分钟前
CSS如何使用Less的Merge功能合并多个属性值_通过逗号或空格组织css参数
jvm·数据库·python
2401_8971905510 分钟前
团队版Navicat专属功能:如何共享数据库架构ER模型_核心机制解析
jvm·数据库·python
m0_6403093012 分钟前
如何利用 Block Tree 避免不必要的子组件重渲染?Vue3 编译黑科技
jvm·数据库·python
LiAo_1996_Y15 分钟前
layui table数据表格分页 layui表格如何开启服务端分页
jvm·数据库·python
LiAo_1996_Y16 分钟前
mysql如何获取最后插入的ID_使用LAST_INSERT_ID函数
jvm·数据库·python
justjinji16 分钟前
告别FPM!Swoole如何让PHP性能飙升10倍?
jvm·数据库·python
weixin_5806140017 分钟前
Golang如何做零拷贝优化_Golang零拷贝教程【进阶】
jvm·数据库·python