【JVM】GC Roots 根可达

414 篇文章 485 订阅 ¥19.90 ¥99.00
本文介绍了JVM中垃圾回收的GC Roots和可达性分析算法。GC Roots包括栈帧中的局部变量、静态变量、JNI handles、已启动的线程等。可达性分析解决了引用计数法的循环引用问题,确定对象是否死亡。在多线程环境下,通过Stop-the-world和安全点确保准确的可达性分析。垃圾回收主要有清除、压缩和复制三种方式,现代方案结合多种算法优化回收效果。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.概述

提到垃圾回收,顾名思义,就是把已经分配出去的,但却不再使用的内存回收回来。对于JVM来说,垃圾指的是在堆中死亡的对象所占据的内存空间。

那么自然而然的,我们就能够提出一个问题:怎么知道对象死没死?由这个问题让我们引出俩个比较有名的思路:

1.引用计数法

引用计数法是一个颇为古老的方式,原因它有致命的缺点。先不说缺点,咱们看一看它的思路。

它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个数。一旦某个对象的引用计数器为0,则说明该对象已经死亡,便可以被回收了

它的具体实现是这样子的:如果有一个引用,被赋值为某一对象,那么将该对象的引用计数器+1。如果一个指向某一对象的引用,被赋值为其他值,那么将该对象的引用计数器 -1

对于引用计数法来说,除了需要额外的空间来存储计数器,以及繁琐的更新计数器以外;引用计数法还有一个重大的漏洞:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值