登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑 ...
谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑
[ 复制链接 ]
兑谓
2025-10-29 01:20:10
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
引用计数与可达性分析:谁死了,谁还活着?
垃圾回收,顾名思义,便是将已经分配出去的,但却不再使用的内存回收回来,以便能够再次分配。在Java虚拟机的语境下,垃圾指的是死亡的对象所占据的堆空间。这里便涉及了一个关键的问题:如何辨别一个对象是存是亡?
引用计数
引用计数(Reference Counting)是一种古老的辨别方法,它的基本思想是给每个对象添加一个引用计数器,每当有一个引用指向该对象时,计数器就加1;每当有一个引用停止指向该对象时,计数器就减1。当计数器的值变为0时,就表示没有任何引用指向该对象,因此该对象就成为垃圾,
引用计数的主要问题是无法处理循环引用(Reference Cycle)的情况。例如,如果对象A和对象B互相引用,那么即使没有其他引用指向它们,它们的引用计数器也不会变为0,因此它们不会被回收,这就导致了内存泄漏。这是引用计数最大的缺点,也是它在许多现代编程语言中不被使用的主要原因。
另外,引用计数需要在每次引用赋值时更新引用计数器,这会带来一定的性能开销。而且,如果多个线程同时修改同一个对象的引用计数器,还需要进行同步,这会进一步增加性能开销。
可达性分析
Java虚拟机的主要采取的是可达性分析(Reachability Analysis)。这个算法是通过一系列的称为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
GC Roots通常是由堆外指向堆内的引用,包括以下几种。
1)虚拟机栈(栈帧中的本地变量表)中引用的对象;
2)方法区中类静态属性引用的对象;
3)方法区中常量引用的对象;
4)本地方法栈中JNI(即一般说的Native方法)引用的对象。
可达性分析可以解决引用计数所不能解决的循环引用问题。例如,即便对象A和B相互引用,只要从GC Roots出发无法到达A或者B,那么可达性分析便不会将它们加入存活对象合集之中。
尽管可达性分析的算法本身很直观,但在实际应用中,还需要解决一些其他问题,如误标和漏标。
1)误标:将已经不再使用的对象错误地标记为"活的"。例如,一个全局静态对象引用了一个已经不再需要的局部对象,它会被错误地标记为"活的"。
2)漏标:将仍在使用的对象错误地标记为"死的"。例如,在并发环境中,一个线程正在使用一个对象,而另一个线程正在进行垃圾回收。如果垃圾回收线程看到的是一个过时的对象引用关系,它可能会错误地认为一个正在使用的对象是"死的"。
误报可能导致Java虚拟机错过部分垃圾回收的机会。而漏报更麻烦,因为垃圾回收器可能会错误地回收仍被引用的对象内存。如果试图从原引用访问已经被回收的对象,可能会导致Java虚拟机崩溃。
Stop-the-world 以及安全点
为了避免这些问题,Java虚拟机的传统垃圾回收算法采用了Stop-the-world方式。在此阶段,Java虚拟机会暂停所有的应用线程,确保在垃圾回收过程中不会有新的对象被创建,也不会有对象引用关系的变化。但这会导致应用程序的响应时间增加,因为在这个阶段,所有的应用线程都被暂停,应用程序无法响应用户的请求。
安全点(Safe Point)是Java虚拟机用来控制Stop-the-World的一种机制。安全点是指那些可以安全地暂停应用线程的点。在这些点上,Java虚拟机可以确保对象引用关系不会发生变化。常见的安全点有方法调用(包括JNI方法调用)、循环跳转、异常抛出等。其中方法调用是一个很好的安全点,因为方法调用通常涉及到大量的对象引用操作。
对于解释执行,当有安全点请求时,Java虚拟机可以在每条字节码指令后面都设置一个安全点,但这种方式的开销很大。在执行即时编译器生成的机器码时,Java虚拟机通常会在方法的入口和退出处,以及循环的回边处设置安全点。另外当线程阻塞时,由于处于Java虚拟机线程调度器的掌控之下,因此可以设置安全点。
未完待续
很高兴与你相遇!如果你喜欢本文内容,记得关注哦
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
谁生
谁死
引用
计数
可达性
相关帖子
C++ 左值、右值、左值引用、右值引用
基础组合计数与卢卡斯定理
图解C++智能指针的循环引用
计数DP
引用调用JS代码
2026.1.9日闲话:DAG 计数
如何为 TiddlyWiki 编辑栏添加块引用按钮
如何为 TiddlyWiki 编辑栏添加块引用按钮
计数DP总结
Codes 采用需求池+引用+导入,这三招创新性解决需求管理难题
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
C++ 左值、右值、左值引用、右值引用
25
812
连热
2025-10-01
安全
基础组合计数与卢卡斯定理
26
836
墨淳雅
2025-10-06
安全
图解C++智能指针的循环引用
37
205
皇甫佳文
2025-10-08
安全
计数DP
30
1064
嫁吱裨
2025-11-05
代码
引用调用JS代码
28
183
新程序
2025-12-11
业界
2026.1.9日闲话:DAG 计数
27
470
辖瑁地
2026-01-09
安全
如何为 TiddlyWiki 编辑栏添加块引用按钮
33
930
丘娅楠
2026-01-16
安全
如何为 TiddlyWiki 编辑栏添加块引用按钮
21
1184
磁呃泵
2026-01-16
安全
计数DP总结
11
72
祝娜娜
2026-01-22
安全
Codes 采用需求池+引用+导入,这三招创新性解决需求管理难题
15
880
电棘缣
2026-02-02
回复
(22)
这帜
2025-12-17 15:04:58
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
晾棋砷
2026-1-20 15:54:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
驶桐柢
2026-1-22 11:19:09
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
撷监芝
2026-1-22 11:34:42
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
阴昭昭
2026-1-23 02:34:34
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
用心讨论,共获提升!
哈妙思
2026-1-24 09:20:14
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
缣移双
2026-1-26 12:31:02
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
崔瑜然
2026-1-27 07:08:36
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
存叭
2026-1-28 03:39:19
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
乐敬
2026-2-3 09:43:27
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
黎瑞芝
2026-2-3 11:21:15
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
馏栩梓
2026-2-4 05:51:43
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
创蟀征
2026-2-4 05:52:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
古修蟑
2026-2-4 05:52:19
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
宇文之
2026-2-8 03:18:32
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
客臂渐
2026-2-9 05:51:48
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
鞍汉
2026-2-25 14:20:53
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
卿搞笔
2026-2-27 10:39:08
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
懂技术并乐意极积无私分享的人越来越少。珍惜
高清宁
2026-3-7 09:24:03
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
兑谓
2026-3-7 09:24:03
关注
0
粉丝关注
24
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9916
7
宋子
9878
8
荪俗
9020
9
闰咄阅
9997
10
刎唇
9999
查看更多
今日好文热榜
586
Qt 技巧笔记(十四):QTableWidget 表格组
263
【JavaScript高级编程】拆解函数流水线 上
446
Claude 绝密模型泄露!Sora 关停、AI 工具
390
P10387 [蓝桥杯 2024 省 A] 训练士兵
114
电容是什么?一个“快充快放”的微型充电宝
948
做了一个网页天气可视化 2
698
Redis命令处理机制源码探究
726
读2025世界前沿技术发展报告27核力量
3
读2025世界前沿技术发展报告27核力量
4
读2025世界前沿技术发展报告27核力量
4
读2025世界前沿技术发展报告27核力量
3
读2025世界前沿技术发展报告27核力量
3
读2025世界前沿技术发展报告27核力量
3
Claude 绝密模型泄露!Sora 关停、AI 工具
3
做了一个网页天气可视化 2
3
做了一个网页天气可视化 2
3
Redis命令处理机制源码探究
3
【JavaScript高级编程】拆解函数流水线 上
3
Claude 绝密模型泄露!Sora 关停、AI 工具
3
Claude 绝密模型泄露!Sora 关停、AI 工具