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 和所…...
AI赋能开发:让快马智能分析并优化你的openclaw101风格网站代码与体验
今天想和大家分享一个很有意思的发现:用AI辅助开发工具来优化技术博客网站,效果真的超出预期。就拿我最近在InsCode(快马)平台上体验的openclaw101风格网站优化来说,整个过程既高效又有趣。 网站分析阶段 首先,我让平台的AI模型…...
突破Windows远程桌面限制:RDP Wrapper多用户并发实战指南
突破Windows远程桌面限制:RDP Wrapper多用户并发实战指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 在远程办公与协作日益普及的今天,Windows远程桌面功能成为连接不同设备的重要桥梁。…...
零代码基础也能用:万物识别-中文-通用领域镜像一键部署教程
零代码基础也能用:万物识别-中文-通用领域镜像一键部署教程 1. 开箱即用的图片识别神器 想象一下这样的场景:你刚拍了一张照片,还没来得及细看,AI就已经告诉你画面里有什么——这不是科幻电影,而是"万物识别-中…...
Turbo实战:如何用任务编排优化你的Monorepo构建流程?以pnpm+vitepress为例
Turbo实战:如何用任务编排优化你的Monorepo构建流程?以pnpmvitepress为例 在当今前端工程化领域,Monorepo已成为管理复杂项目的标配方案。但当项目规模增长到一定程度时,传统的构建方式往往会面临效率瓶颈——每次全量构建耗时漫长…...
VisionPro实战:CogGraphicCollection在工业检测中的5个高效用法(附代码)
VisionPro实战:CogGraphicCollection在工业检测中的5个高效用法(附代码) 在工业自动化领域,机器视觉系统正变得越来越智能和高效。作为康耐视VisionPro平台的核心组件之一,CogGraphicCollection为工程师提供了强大的图…...
CFO/SFO/STO/CFD/IQ不平衡/IQ gain mismatch/IQ phase mismatch/干扰信号载波频率 等等蓝牙通信中干扰参数解析
载波频偏和采样频偏确实来自物理上不同的时钟源,虽然它们可能在数字通信系统中相互影响。 我们可以从三个层面来理清它们的关系: 2. 为什么容易混淆 因为在实际电路中,射频本振和采样时钟可能来自同一个参考晶振。在一些低成本或集成度高的系统中,收发信机通过锁相环(PL…...
Python中的生成器和迭代器:原理与实践
Python中的生成器和迭代器:原理与实践 一、背景与动机 在Python编程中,处理大量数据时,内存管理是一个常见的挑战。生成器(Generators)和迭代器(Iterators)为解决这一问题提供了一种高效的方式&…...
HRNet的‘并行多分支’到底强在哪?一个动画图解带你彻底搞懂特征融合机制
HRNet并行多分支架构的视觉化解析:如何通过双向特征融合突破关键点检测精度瓶颈 在计算机视觉领域,关键点检测任务(如人体姿态估计、人脸特征点定位)对空间精度的要求近乎苛刻。传统卷积神经网络通过层层下采样提取语义特征的代价…...
图像转3D模型:零基础制作个性化浮雕的完整指南
图像转3D模型:零基础制作个性化浮雕的完整指南 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项目地…...
深度学习驱动的图像去雾:2023年最新算法与应用实践
1. 图像去雾技术的现状与挑战 清晨打开窗户,如果外面雾气弥漫,我们往往会等雾散了再拍照。但计算机视觉系统可没这个耐心——自动驾驶汽车必须实时看清路况,无人机巡检得在雾天正常工作。这就是图像去雾技术存在的意义。2023年,随…...

