深入理解JVM阅读笔记- 第3章垃圾收集器与内存分配策略-对象已死

颜色课堂开课了。黑在使用Java做项目的时候,一直对虚拟机如何自动回收实例对象感到好奇。但是又不知道如何去了解。于是,就去请教白。

第3章 垃圾收集器与内存分配策略

3.2 对象已死

黑:JVM是如何进行垃圾回收的?

白:JVM是通过后台应用程序对无用的Java对象进行垃圾回收,一般有标记-清除算法,复制算法,标记-整理算法等,垃圾回收算法。不过,在了解垃圾回收之前,我认为你应该先了解一下,什么样的对象才算是垃圾,可以用来回收。

黑:那,怎么样的对象才是可以被回收的对象呢?

白:对象是否可以被回收,则涉及到判断对象的是否已经无用。一般情况下,使用计算器算法,或者是根索引算法来判断一个对象是否已死。

白:计数器算法,是通过给每一个对象都添加一个计算器,当该对象每被调用一次则计算器加1,调用结束则计数器减1,当计数器为0时表示当前对象没有被其他对象引用,可以被回收。当然,计数器算法也有很明显的缺点:当两个对象循环引用的时候,则计数器值不为0,无法识别出对象已死,造成内存泄漏。

白:根索引算法,程序通过一系列的GC Roots节点向下搜索,如果搜索到,则表示该对象仍然存活,被其他对象引用。即可达;反之,对象已死(不可达)。这时对象可以被GC回收。现在的通用JVM都是使用GC Roots的方式进行判断对象是否已死。

黑:我大概明白了,只是根索引算法中,我们是如何确定Roots节点的?

白:要确定Roots节点,有一下这些方式
。虚拟机栈中的引用对象
。本地方法栈中的引用对象
。方法区中的常类引用对象
。方法区中的静态变量引用对象
通过这四种方式确定Roots节点。

黑:这下我明白了。在JVM进行垃圾回收前需要判断该对象是否可以被回收。并且有计算器算法和根索引算法。而现代JVM都是使用根索引算法进行判断。

白:对,这就是判断对象是否可以被回收的内容。Java的垃圾回收我们先讲到这里吧。黑,你回去理解记住这些内容。下次我再给你讲:在判断对象可回收之后,JVM是如何进行回收的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值