【JVM】三色标记法原理
在JVM中,三色标记法是GC过程中对象状态的判断依据,回收前给对象设置上不同的三种颜色,三色分为白色、灰色、黑色。根据颜色的不同,决定对象是否要被回收。
白色表示:
- 初始状态:所有对象未被 GC 访问。
- 含义:待扫描对象(可能是垃圾)。
- GC 结束时:所有白色对象视为垃圾,被回收。
灰色表示:
- 含义:已被 GC 访问,但其引用的对象还未扫描完。
- 作用:表示“中间状态”,是标记过程的待处理队列。
黑色表示:
- 含义:对象及其直接引用对象均被扫描完成。
- 关键:黑色对象不会被重新扫描,视为存活对象。
执行过程:
最初始时,所有对象的颜色为白色。进行GC时,从引用链的根(GC Root)开始扫描,GC Root自身标记为黑色,与其直接相连的对象标记为灰色,然后从灰色开始寻找可达的对象并将其标记为灰色,到最后仍为白色的对象表示不可达对象,进行回收。
也就是当对象其直接引用对象还未被扫描完时,这个对象的颜色为灰色。
如图所示,
1.从GC Root开始扫描,扫描到对象A和对象B,标记为灰色。
2.对象B有一个引用对象,被扫描到后,对象B由灰色变为黑色,对象E标记为灰色
3.对象E没有引用对象,直接标记为黑色
4.对象A有两个引用对象,对象C已经被扫描到,对象D还未被扫描到,则对象C标记为灰色,对象 D仍为白色,由于对象A的引用对象为全被扫描到,所以其颜色暂时仍要保持灰色
5.对象F没有直接或间接与GC Root相连,所以其颜色为白色不变
6.扫描完成后,开始回收对象,白色对象被认为没有被任何对象引用,可以进行回收。在图中,最终只有对象F为白色,所以将对象F进行回收。
存在的问题:
漏标问题
在GC过程中,黑色对象(A)新增引用指向白色对象(C)。灰色对象(B)断开引用指向白色对象(C)。
这个时候则发生了:对象C刚变为白色,对象A就引用了对象C,还没来得及变色。这个时候对象C被清理了。
此时 C 被孤立(无灰色对象引用它),最终被误回收。导致系统异常
相关文章:

【JVM】三色标记法原理
在JVM中,三色标记法是GC过程中对象状态的判断依据,回收前给对象设置上不同的三种颜色,三色分为白色、灰色、黑色。根据颜色的不同,决定对象是否要被回收。 白色表示: 初始状态:所有对象未被 GC 访问。含义…...

【uniapp开发】picker组件的使用
项目uniapp,结合fastadmin后端开发 picker组件的官方文档说明 https://en.uniapp.dcloud.io/component/picker.html#普通选择器 先看效果: 1、实现设备类型的筛选;2、实现设备状态的筛选; 前端代码(节选࿰…...

【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程
目录 1 -> 同步云函数/云对象 1.1 -> 同步单个云函数/云对象 1.2 -> 批量同步云函数/云对象 2 -> 同步云数据库 2.1 -> 同步单个对象类型 2.2 -> 批量同步对象类型 3 -> 一键同步云侧代码 1 -> 同步云函数/云对象 说明 对于使用DevEco Studio…...
如何评估大语言模型效果
评估大模型微调后的效果是一个系统化的过程,需要结合客观指标和主观评估,并根据任务类型(分类、生成、回归等)选择合适的评估方法。 一、评估前的准备工作 数据集划分: 将数据分为 训练集、验证集 和 测试集ÿ…...

go-zero微服务入门案例
一、go-zero微服务环境安装 1、go-zero脚手架的安装 go install github.com/zeromicro/go-zero/tools/goctllatest2、etcd的安装下载地址根据自己电脑操作系统下载对应的版本,具体的使用自己查阅文章 二、创建一个user-rpc服务 1、定义user.proto文件 syntax &qu…...

Python控制台输出彩色字体指南
在Python开发中,有时我们需要在控制台输出彩色文本以提高可读性或创建更友好的用户界面。本文将介绍如何使用colorama库来实现这一功能。 为什么需要彩色输出? 提高可读性:重要信息可以用不同颜色突出显示更好的用户体验:错误信息…...
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
最后一期了,感谢大家一直以来的关注,如果您对本系列文章内容有问题或者有更好的方法,请在评论区发送。 介绍 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制导致攻击者可以传入任意…...

开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情
开源之夏2025编程活动正在如火如荼的进行中,当前也迎来了报名的倒计时阶段,开源之夏组织方也通过高校行系列活动进入各大高校,帮助高校开发者科普开源文化、开源活动、开源技术。 6月4日 开源之夏携手多位开源技术大咖、经验型选手走进西安电…...
html、css(javaweb第一天)
HTML: 文字、图片、视频组成 由标签组成的语言 行内标签span//无语意 <img src"url">//图片 <a herf"url" target"是否开新页面">点击谁</a>//超链接 <video src"url" controls></video>//controls播放…...

解决数据库重启问题
最近部署软件时,发现mysql会一直在重启,记录下解决办法: 1.删除/home/dataexa/install/docker/datas/mysql路径下的data文件夹 2.重新构建mysql docker-compose up -d --build mysql 3.停掉所有应用,在全部重启: do…...

前后端交互过程中—各类文件/图片的上传、下载、显示转换
前后端交互过程中—各类文件/图片的上传、下载、显示转换 图片补充:new Blob()URL.createObjectURL()替代方案:FileReader.readAsDataURL()对比: tiff文件TIFF库TIFF转换通过url转换tiff文件为png通过文件选择的方式转换tiff文件为png 下…...
SparkSQL 优化实操
一、基础优化配置 1. 资源配置优化 # 提交Spark作业时的资源配置示例 spark-submit \--master yarn \--executor-memory 8G \--executor-cores 4 \--num-executors 10 \--conf spark.sql.shuffle.partitions200 \your_spark_app.py 参数说明: executor-memory: 每…...
【vLLM 学习】Cpu Offload Lmcache
vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ *在线运行 vLLM 入门教程:零基础分步指南 源码 examples/offline_inf…...

数据库同步是什么意思?数据库架构有哪些?
目录 一、数据库同步是什么 (一)基本概念 (二)数据库同步的类型 (三)数据库同步的实现方式 二、数据库架构的类型 (一)单机架构 (二)主从复制架构 &a…...

【数据结构】详解算法复杂度:时间复杂度和空间复杂度
🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平 前言&…...

Rest-Assured API 测试:基于 Java 和 TestNG 的接口自动化测试
1. 右键点击项目的文件夹,选择 New > File。 2. 输入文件名,例如 notes.md,然后点击 OK。 3. 选择项目类型 在左侧的 Generators 部分,选择 Maven Archetype,这将为你生成一个基于 Maven 的项目。 4. 配置项目基…...
多模型协同:基于 SAM 分割 + YOLO 检测 + ResNet 分类的工业开关状态实时监控方案
一、技术优势与适配性分析 1. 任务分工的合理性 YOLO(目标检测) 核心价值:快速定位工业开关在图像中的位置(边界框),为后续分割和分类提供ROI(感兴趣区域)。工业场景适配性…...
【分销系统商城】
分销商城系统是一种结合电商与社交裂变的多层级分销管理平台,通过佣金激励用户成为分销商,实现低成本快速拓客和销量增长。以下是其核心要点解析: 🛍️ 一、系统定义与核心价值 基本概念 核心模式&#…...
LangChainGo入门指南:Go语言实现与OpenAI/Qwen模型集成实战
目录 1、什么是langchainGo2、langchainGo的官方地址3、LangChainGo with OpenAI3-1、前置准备3-2、安装依赖库3-3、新建模型客户端3-4、使用模型进行对话 4、总结 1、什么是langchainGo langchaingo是langchain的go语言实现版本 2、langchainGo的官方地址 官网:…...
5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战 在HarmonyOS NEXT的全场景生态中,系统级性能调优是构建流畅、高效应用的关键。通过内核调度精细化控制、存储与网络I/O深度优化,以及多线程资源智能管理,开发者…...

react public/index.html文件使用env里面的变量
env文件 ENVdevelopment NODE_ENVdevelopment REACT_APP_URL#{REACT_APP_URL}# REACT_APP_CLIENTID#{REACT_APP_CLIENTID}# REACT_APP_TENANTID#{REACT_APP_TENANTID}# REACT_APP_REDIRECTURL#{REACT_APP_REDIRECTURL}# REACT_APP_DOMAIN_SCRIPT#{REACT_APP_DOMAIN_SCRIPT}#pu…...

chili3d 笔记17 c++ 编译hlr 带隐藏线工程图
这个要注册不然emscripten编译不起来 --------------- 行不通 ---------------- 结构体 using LineSegment std::pair<gp_Pnt, gp_Pnt>;using LineSegmentList std::vector<LineSegment>; EMSCRIPTEN_BINDINGS(Shape_Projection) {value_object<LineSegment&g…...

创建一个纯直线组成的字体库
纯直线组成的字体,一个“却”由五组坐标点组成,存储5个点共占21字节,使用简单,只要画直线即可, “微软雅黑”,2个轮廓,55坐标点,使用复杂,还填充。 自创直线字体 “微软…...
接口不是json的内容能用Jsonpath获取吗,如果不能,我们选用什么方法处理呢?
JsonPath 是一种专门用于查询和提取 JSON 数据的查询语言(类似 XPath 用于 XML)。以下是详细解答: JsonPath 的应用场景 API 响应处理:从 REST API 返回的 JSON 数据中提取特定字段。配置文件解析:读取 J…...
使用 Docker Compose 从零部署 TeamCity + PostgreSQL(详细新手教程)
JetBrains TeamCity 是一款专业的持续集成(CI)服务器工具,支持各种编程语言和构建流程。本文将一步一步带你用 Docker 和 Docker Compose 快速部署 TeamCity,搭配 PostgreSQL 数据库,并确保 所有操作新手可跟着做。 一…...
Go 语言实现高性能 EventBus 事件总线系统(含网络通信、微服务、并发异步实战)
前言 在现代微服务与事件驱动架构(EDA)中,事件总线(EventBus) 是实现模块解耦与系统异步处理的关键机制。 本文将以 Go 语言为基础,从零构建一个高性能、可扩展的事件总线系统,深入讲解&#…...

Linux进程(中)
目录 进程等待 为什么有进程等待 什么是进程等待 怎么做到进程等待 wait waitpid 进程等待 为什么有进程等待 僵尸进程无法杀死,需要进程等待来消灭他,进而解决内存泄漏问题--必须解决的 我们要通过进程等待,获得子进程退出情况--知…...

【计算机组成原理】计算机硬件的基本组成、详细结构、工作原理
引言 计算机如同现代科技的“大脑”,其硬件结构的设计逻辑承载着信息处理的核心奥秘。从早期程序员手动输入指令的低效操作,到冯诺依曼提出“存储程序”概念引发的革命性突破,计算机硬件经历了从机械操控到自动化逻辑的蜕变。本文将深入拆解…...
npm error Cannot read properties of null (reading ‘matches‘)
当在使用 npm 命令时遇到 Cannot read properties of null (reading matches) 错误,这通常表示代码尝试访问一个 null 对象的 matches 属性。以下是综合多个来源的解决策略,按优先级排列: 一、核心解决方法 1. 清理缓存与重新安装依赖&…...

MVC分层架构模式深入剖析
🔄 MVC 交互流程 #mermaid-svg-5xGt0Ka13DviDk15 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5xGt0Ka13DviDk15 .error-icon{fill:#552222;}#mermaid-svg-5xGt0Ka13DviDk15 .error-text{fill:#552222…...