首页 > 分享 > 判断一个对象是否会被垃圾回收器回收

判断一个对象是否会被垃圾回收器回收

判断一个对象是否会被垃圾回收器回收

最新推荐文章于 2023-02-26 19:43:05 发布

两节课同学 于 2019-11-05 00:07:45 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

在阅读《深入理解java虚拟机》之前,就曾看过JVM通过引用计数算法来判断一个对象的存活状态这种结论,事实上并非如此,此书作者也用实例证明此结论的错误。引用计数算法意思是当一个对象被另一个地方引用时,计数器的值+1,引用失效后,值-1。实例中使用两个对象相互引用,可还是被回收了。

真正的判断方法应该是可达性分析算法,即通过一系列的称为"引用链"来判断存货状态,引用链的最顶级为“GC Roots”,作为起点,当一个对象与GC Roots没有任何引用链相连接,说明该对象不可用,会被判定为可回收对象。

在这里插入图片描述

上图右边的object5、object6、object7均没有引用链与GC Roots相连,即判断为不可达,就会被判定为可回收的对象。

在java语言中,可以作为GC Roots的对象包括:

–虚拟机栈(栈中的本地变量表)中引用的对象

–方法区中类静态属性引用的对象

–方法区中常量引用的对象

–本地方法栈中(即一般说的Native方法)引用的对象

当一个对象被判定为可回收对象并不一定就是它会被回收,要让一个对象真正死亡必须经历两个标记程。第一个标记过程就是当一个对象与GC Roots为不可达时,第二次标记会进行一次筛选,筛选的条件是要不要执行finalize()方法,当对象没有重写finalize()方法或者此方法已经被虚拟机调用过,将不会执行此方法,其就是非死亡不可。但是要注意的是,一个对象的finalize()方法只会被执行一次,这次通过调用此方法也许可以不被回收,但下次它就一定会被回收。

相关知识

Java对象生命周期管理:从创建到垃圾回收的完整解析
回收花瓶,回收仿真花,回收塑料花,回收人造花,回收緑植
花卉回收可变废为宝
收购工艺品,回收仿真花,回收工艺品,收购塑料花,工艺品回收,回收花艺礼品
花卉回收可变废为宝 – 根盆网
饮料瓶回收再利用可以做什么
一种专用园林绿化垃圾回收处理系统的制作方法
年花年桔回收
罗湖城管细化垃圾分类处理流程,将建全区垃圾分类回收工作管控平台
废钢筋回收 废铁块回收 废边角料回收 废排山管回收 废电缆线回收

网址: 判断一个对象是否会被垃圾回收器回收 https://m.huajiangbk.com/newsview1101483.html

所属分类:花卉
上一篇: 牵牛花和矮牵牛的区别,养护方法的
下一篇: 判断字符串变量str是否为空的一