JVM (PART V)如何判断对象是否应该回收
来源:互联网 发布:淘宝注册手机验证码 编辑:程序博客网 时间:2024/05/19 01:33
再进行垃圾回收之前必须先判断对象是否还“存活”,如何判断对象是否“存活”?
引用计数法
做法:
给对象添加一个引用计数器,每当有一个地方引用他的时候,计数器加一,当引用失效的时候计数器减一。如果计数器的值为零则表示对象不可能再被使用。
优点:
实现简单,判定效率高
缺点:
无法解决对象间循环引用的问题
对象的循环引用
图解:
如果objA和objB都有字段instance并且
objA.instance=objB;
objB.instance=objA;
除此之外再无其他引用。此时引用计数器的值都为2。
如果令objA=null;objB=null;
此时在堆中的对象就会变得“不可到达”,但是他们还彼此持有彼此的引用,结果如图所示:
注意此时我们再也无法引用堆中的对象objA,和objB(姑且这么叫),但是引用计数器的值都是1。
于是乎在对象的引用计数法中会判断这两个对象依然存活。
如果存在大量这样的彼此引用的对象就会导致内存泄漏。
可达性分析算法
做法:
通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链的时候,这个对象就是可以被回收的。
图解:
可以作为GC Roots的对象包括:
1.虚拟机栈(栈内存)中的引用对象2.方法区中的静态属性引用的对象3.方法区中的常量引用对象4.本地方法栈中JNI引用的对象
阅读全文
0 0
- JVM (PART V)如何判断对象是否应该回收
- JVM如何判断对象是否需要被回收
- jvm如何判断实例对象是否需要回收
- jvm如何判断对象是否可以被回收
- JVM如何判断一个Java对象是否可以回收
- JVM如何判断一个Java对象是否可以回收
- 轻松搞定java内存模型(三)判断对象是否应该被回收
- JVM中如何判断对象是否死亡
- 垃圾回收器——如何判断对象是否存活
- JVM学习笔记(二)JVM判断对象是否”存活”
- JVM运行时数据区及判断对象是否该回收
- jvm判断对象是否存活
- jvm中如何判定对象需要回收?
- 生存还是死亡 —— Java虚拟机如何判断对象是否需要回收
- JVM之判断一个对象是否存活
- JVM判断对象是否存活的方法
- jvm-判断对象是否存活的算法
- jvm 判断对象是否已经死亡
- 【三分】洛谷3382[三分法]题解
- Tomcat默认编码问题
- 动态规划 最长非降子序列
- 批量删除特定文件夹下特定文件
- ubuntu安装和卸载mysql
- JVM (PART V)如何判断对象是否应该回收
- 操作系统(笔记)
- eclipse使用Ctrl+Shift+O快速导包无效解决方法
- Spring Boot整合模板引擎freemarker以及servlet
- Solr 空间搜索配置
- RectTransform详解
- IPC onvif全网通的实现原理
- 运用python进行数据分析 -- numpy 2
- Linux shell 技巧:对文件名中包含空格的处理方法