轻松搞定java内存模型(三)判断对象是否应该被回收

轻松搞定java内存模型(二)判断对象是否应该被回收

      上一篇我们介绍完了类的整个加载过程,这样我们写好的类就可以在虚拟机中发光发热了,那我们该怎么判断,我们创建的对象在虚拟机中什么时候该被回收,释放自己占用的内存呢?

      1:引用计数法

           给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象是不可能被使用的。也就是需要被清除的对象。

           引用计数法实现简单,判定效率也高,但是在虚拟机中却很少真的被应用,主要是因为引用计数法很难解决对象之间相互循环引用的问题。

           例如:

           对象A和对象B互相引用,两个对象的引用计数器的数值都是1,但是其实两个对象都已经没有用,应该被清除。

      2:可达性分析法

           可达性分析法基本思路就是通过一系列的成为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,(其中的路径叫做引用链),当一个对象到GC Roots没有任何引用链,则证明此对象是不可用的。

           可达性分析是最常用的分析对象是否可用的算法,Hotspot虚拟机就是使用的这个算法。

           如下图,就是当从GC Roots到某个对象不可达的时候,这个对象不可用。

         

           Java语言中的GC Roots:

           1:在虚拟机栈中的引用对象

           2:在方法区中的静态属性引用的对象

           3:在方法区中常量引用的对象

           4:在本地方法区中引用的对象。

 

      经过前几篇的介绍我们了解了一个类如何被加载被使用,然后在本节又了解了虚拟机到底是如何来判断一个对象是如何被判定是否应该继续存在的,那么下篇我们就来好好谈谈,最最关键的GC,看看jvm的垃圾回收如何完成。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值