JVM判断对象是否存活之引用计数法、可达性分析
目录
前言
引用计数法
概念
优点
缺点
可达性分析
概念
缺点:
扩展:
1.GC Roots 概念
2.STW (Stop the world)
前言
JVM有两种算法来判断对象是否存活,分别是引用计数法和可达性分析算法,针对可达性分析算法STW时间长、内存消耗等问题下可依赖三色标记法解决。
引用计数法

概念
对象中添加一个计数器,每当有一个地方引用它,计数器就加 1;
如果引用失效,计数器就减 1;
任何时候计数器为 0 的对象就是不可能再被使用的。
优点
这个方法实现简单,效率高。
缺点

很难解决对象之间相互循环引用,循环引引用会导致对象无法被回收,最终会导致内存泄漏及内存溢出。
可达性分析

概念
通过一系列的称为GC根“的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到GC根没有任何引用链相连的话,则证明此对象是不可用的。
过程
要两次标记:
1.第一次标记通过可达性分析算法。如果没有GC Roots相连接的引用链,那么将第一次标记
2.如果对象的 finalize()方法被覆盖并且没有执行过,则放在F-Queue队列中等待执行(不一定会执行,如果一段时间后该队列的 finalize() 方法被执行且和GC Roots关联,则移出“即将回收集合。如果仍然没有关联,则进行第二次标记,才会对该对象进行回收
代码如下:
public class TestGCRoot {public static void main(String[] args) throws IOException {List<Object> list = new ArrayList<>();list.add("a");list.add("b");System.out.println(1);System.in.read();list = null;System.out.println(2);System.in.read();System.out.println("end...");}
}
缺点:
1.STW时间长
2. 内存消耗严重
扩展:
1.GC Roots 概念
GC roots是作为可达性分析算法的起点的。要实现语正确的可达性分析,就必须要能完整枚举出所有的GCRoots,否则就可能会漏扫描应该存活的对象,导致GC错误回收了这些被漏扫的活对象。那么,所谓“GC就是一组必须活跃的引用。
可以当GC roots 引用链得:
Class - 由系统类加载器(system class loader)加载的对象,这些类是不能够被回收的,他们可以以静态字段的方式保存持有其它对象。
Thread - 活着的线程
Stack Local - Java方法的local变量或参数
JNI Local - JNI方法的local变量或参数
JNI Global - 全局JNII用
Monitor Used - 被同步锁 (synchronized) 持有的对象
2.SWT (Stop the world)
Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起,这是Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互
STW产生的问题:
用户线程的运行必然会导致对象的引用关系发生改变,这就会导致两种情况:
多标: 其实就是这个对象原本应该被回收掉的垃圾对象,但是被错误的标记成了存活对象从而导致这个对象没有被GC回收掉。产生了一些浮动垃圾,下次GC再清理就可以
漏标:一个对象本来应该是存活对象,但是没有被正确的标记上,导致被错误的垃圾回收掉了
相关文章:
JVM判断对象是否存活之引用计数法、可达性分析
目录 前言 引用计数法 概念 优点 缺点 可达性分析 概念 缺点: 扩展: 1.GC Roots 概念 2.STW (Stop the world) 前言 JVM有两种算法来判断对象是否存活,分别是引用计数法和可达性分析算法,针对可达性分析算法STW时间长、…...
报道 | 2023年12月-2024年2月国际运筹优化会议汇总
2023年12月-2024年2月召开会议汇总: The 16th Annual International Conference on Combinatorial Optimization and Applications (COCOA 2023) Location: Virtual Important dates: Conference: December 11, 2023 (Start) - December 13, 2023 (End) Details…...
【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷C
单选题 1、A right triangle has a side that is 5cm long, and its hypotenuse is 13cm long.The area of the triangle is (). A、30 cm2 B、60 cm2 C、65 cm2 D、32.5 cm2 答案:A 2、一位旅客安检后走在前往登机口的路上。路途中一部…...
“升级图片管理,优化工作流程——轻松将JPG转为PNG“
在图片时代,无论是工作还是生活,图片管理都显得尤为重要。批量处理图片,将JPG格式轻松转换为PNG格式,能够使您的图片管理更优化,提高工作效率。 首先,我们进入首助编辑高手主页面,会看到有多种…...
基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍: 采用…...
助力水泥基建裂痕自动化巡检,基于yolov5融合ASPP开发构建多尺度融合目标检测识别系统
道路场景下的自动化智能巡检、洞体场景下的壁体类建筑缺陷自动检测识别等等已经在现实生活中不断地落地应用了,在我们之前的很多博文中也已经有过很多相关的实践项目经历了,本文的核心目的是想要融合多尺度感受野技术到yolov5模型中以期在较低参数量的情…...
rk3588使用vscode远程debug 配置文件
进入调试口,需要本地和远程都装C/C estension 下面是在调mpi_enc_test的launch.json 文件自己make生成的 makefile 没改过 args项是输入参数,配置了相机输入,具体参数看他的demo说明, 记录一下,方便以后拷贝方便 {// …...
隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态
2023年11月 NearCon2023 活动期间,基于 Cosmos SDK 构建的隐私协议 Secret Network,宣布使用 Octopus Network 开发的 NEAR-IBC,于2024年第一季度实现 Secret Network 与 NEAR Protocol 之间的跨链交互。 这将会是Cosmos 生态与 NEAR 之间的首…...
Milvus Standalone安装
使用Docker Compose安装 Milvus standalone(即单机版),进行一个快速milvus的体验。 前提条件: 1.系统可以使用centos 2.系统已经安装docker和docker-compose 3.milvus版本这里选择2.3.1 由于milvus依赖etcd和minio,…...
二分查找算法合集
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 时间复杂度 O(logn) 自己写二分算法 左闭右开 左开右闭C算法&a…...
SELinux零知识学习十八、SELinux策略语言之类型强制(3)
接前一篇文章:SELinux零知识学习十七、SELinux策略语言之类型强制(2) 二、SELinux策略语言之类型强制 2. 类型、属性和别名 (3)关联类型和属性 1)使用type语句关联类型和属性 迄今为止,我们…...
人工智能引领环境保护的新浪潮:技术应用及其影响
在全球范围内,环境保护已经成为一个迫切的话题。随着人工智能技术的发展,它开始在环境保护领域扮演越来越重要的角色。AI不仅能够帮助更有效地监测环境变化,还能提出解决方案来应对环境问题。 污染监测与控制: AI系统可以分析来自…...
第三十四节——组合式API使用路由
<template> <div><div>我是第一个页面</div><button click"link2">跳转到第二个页面</button></div> </template> <script setup>// 从vue-router引入 useRouter这个钩子import { useRouter } from vue-route…...
文件隐藏 [极客大挑战 2019]Secret File1
打开题目 查看源代码发现有一个可疑的php 访问一下看看 点一下secret 得到如下页面 响应时间太短我们根本看不清什么东西,那我们尝试bp抓包一下看看 提示有个secr3t.php 访问一下 得到 我们看见了flag.php 访问一下可是什么都没有 那我们就进行代码审计 $file$_…...
Linux CentOS 8(MariaDB的数据类型)
Linux CentOS 8(MariaDB的数据类型) 目录 一、项目描述二、相关知识三、项目分析3.1 数据类型的分类3.2 数据类型属性 一、项目描述 Jan16公司为满足部门之间数据共享、减少数据冗余度和保持数据独立性等要求,需要对数据库中的数据类型拥有一…...
云端援手:智能枢纽应对数字资产挑战 ——华为云11.11应用集成管理与创新专区优惠限时购
现新客3.96元起,下单有机会抽HUAWEI P60 Art 福利仅限双十一 机会唾手可得,立即行动! 「有效管理保护应用与数据的同时实现高效互通」——华为云全力满足企业需求,推出全套「应用集成管理与创新」智能解决方案:华为云…...
Azure的AI使用-(语言检测、图像分析、图像文本识别)
1.语言检测 安装包: # 语言检测 %pip install azure-ai-textanalytics5.2.0 需要用到密钥和资源的终结点,所以去Azure上创建资源,我这个是创建好的了然后点击密钥和终结者去拿到key和终结点 两个密钥选择哪个都行 语言检测代码示例&#…...
QDateEdit开发详解
文章目录 一、创建 `QDateEdit` 对象二、设置日期范围三、设置当前日期四、获取选择的日期五、显示日历弹出窗口六、信号与槽七、格式化日期显示1. `QDateTime` 类2. 日期时间格式化字符串3. 自定义格式化字符串4. 本地化日期格式5. `QDate` 和 `QTime` 的格式化6. 时间戳转日期…...
3.6 Windows驱动开发:内核进程汇编与反汇编
在笔者上一篇文章《内核MDL读写进程内存》简单介绍了如何通过MDL映射的方式实现进程读写操作,本章将通过如上案例实现远程进程反汇编功能,此类功能也是ARK工具中最常见的功能之一,通常此类功能的实现分为两部分,内核部分只负责读写…...
zsh和ohmyzsh安装指南+插件推荐
文章目录 1. 安装指南2. 插件配置指南3. 参考信息 1. 安装指南 1. 安装 zsh sudo apt install zsh2. 安装 Oh My Zsh 国内访问GitHub sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"这将安装 Oh My Zsh 和所…...
电感器特性与工程应用全解析
电感器的工程应用与特性分析1. 电感器基础特性电感器(Inductor)是电子电路中的基本无源元件,由导线绕制而成,可分为空心线圈和带磁芯线圈两种基本结构。其基本单位是亨利(H),常用单位还包括毫亨(mH)和微亨(μH),换算关系为&#x…...
极域电子教室突破技术:从系统控制到自主操作的攻防对抗
极域电子教室突破技术:从系统控制到自主操作的攻防对抗 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 一、核心痛点:极域电子教室的控制枷锁 在信息化教…...
FlowState Lab 保姆级Docker容器化部署与运维实战
FlowState Lab 保姆级Docker容器化部署与运维实战 1. 前言:为什么选择Docker部署FlowState Lab 如果你正在寻找一种简单高效的方式来部署FlowState Lab模型,Docker容器化无疑是最佳选择。想象一下,你花了一周时间在本地调试好的模型&#x…...
保姆级教程:用Fine-Pruning防御深度学习后门攻击(附PyTorch代码)
深度学习模型安全防护实战:Fine-Pruning防御后门攻击全解析 在自动驾驶、人脸识别等关键AI应用场景中,模型安全性已成为产品落地的核心考量。近期研究表明,超过34%的开源预训练模型存在潜在后门风险,攻击者可通过精心设计的触发器…...
别再死记硬背了!一文搞懂EtherCAT四种寻址方式(附FMMU配置实例)
深入解析EtherCAT四大寻址机制:从原理到实战配置 第一次接触EtherCAT的工程师,往往会被其复杂的寻址方式搞得晕头转向。位置寻址、节点寻址、逻辑寻址、广播寻址——这些术语听起来相似却又各具特点,死记硬背不仅效率低下,更会在实…...
Wan2.2-I2V-A14B效果展示:RTX4090D优化版生成高清视频作品集,开箱即用
Wan2.2-I2V-A14B效果展示:RTX4090D优化版生成高清视频作品集,开箱即用 1. 惊艳效果预览:专业级视频生成能力 当第一次看到Wan2.2-I2V-A14B生成的视频作品时,很难相信这些画面完全由AI从文字描述创造。这款专为RTX4090D优化的文生…...
从DXF到Qt图形:利用dxflib精准解析与绘制复杂多段线
1. DXF文件与dxflib库基础解析 在CAD设计领域,DXF文件就像工程图纸的"万能翻译官"。这种由AutoCAD创建的开放格式,能够完整保存各类图形元素信息。而dxflib这个轻量级C库,就是专门为读取这种文件而生的利器。我第一次接触这个库时&…...
中国象棋AlphaZero:从零构建强化学习象棋AI的完整指南
中国象棋AlphaZero:从零构建强化学习象棋AI的完整指南 【免费下载链接】ChineseChess-AlphaZero Implement AlphaZero/AlphaGo Zero methods on Chinese chess. 项目地址: https://gitcode.com/gh_mirrors/ch/ChineseChess-AlphaZero 中国象棋AlphaZero是一个…...
CMake文件操作全攻略:从读取到加密,这些命令让你的项目更高效
CMake文件操作全攻略:从读取到加密,这些命令让你的项目更高效 在构建系统领域,CMake已经成为了事实上的标准工具。但很多开发者仅仅停留在基础的add_executable和target_link_libraries使用层面,忽视了CMake强大的文件操作能力。实…...
思源宋体:免费商用中文字体的全面应用指南
思源宋体:免费商用中文字体的全面应用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字设计领域,字体如同视觉沟通的语言。Source Han Serif TTF&…...

