jvm中如何判定对象需要回收?
2017-12-27 17:20
162 查看
jvm中如何判定对象需要回收?
引用计数法
每个对象上都有一个引用计数,对象每被引用一次,引用计数器就+1,对象引用被释放,引用计数器-1,直到对象的引用计数为0,对象就标识可以回收这个可以用数据算法中的图形表示,对象A-对象B-对象C 都有引用,所以不会被回收,对象B由于没有被引用,没有路径可以达到对象B,对象B的引用计数就就是0,对象B就会被回收。
但是这个算法有明显的缺陷,对于循环引用的情况下,循环引用的对象就不会被回收。例如下图:对象A,对象B 循环引用,没有其他的对象引用A和B,则A和B 都不会被回收。
root搜索算法
这种算法目前定义了几个root,也就是这几个对象是jvm虚拟机不会被回收的对象,所以这些对象引用的对象都是在使用中的对象,这些对象未使用的对象就是即将要被回收的对象。简单就是说:如果对象能够达到root,就不会被回收,如果对象不能够达到root,就会被回收。被启动类(bootstrap加载器)加载的类和创建的对象 jvm运行时方法区类静态变量(static)引用的对象 jvm运行时方法去常量池引用的对象 jvm当前运行线程中的虚拟机栈变量表引用的对象 本地方法栈中(jni)引用的对象1
2
3
4
5
[/code]
jvm在确定是否回收的对象的时候采用的是root搜索算法来实现。
相关文章推荐
- jvm中如何判定对象需要回收?
- JVM如何判断对象是否需要被回收
- jvm如何判断实例对象是否需要回收
- JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收
- 虚拟机是如何判断一个对象是否需要回收
- JVM如何判断哪些对象可以被回收
- Java虚拟机:如何判定哪些对象可回收?
- JVM——引用计数算法和可达性分析算法——判断对象是否需要被回收
- Java是如何判断对象是否需要回收的?
- JVM 自动内存管理:对象判定和回收算法
- JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收
- JVM如何判断一个Java对象是否可以回收
- 生存还是死亡 —— Java虚拟机如何判断对象是否需要回收
- Java虚拟机如何判断对象已死?(哪些内存需要回收)
- jvm垃圾回收机制(二)算法和如何进行判断对象是否回收实例
- 如何判定对象已死可以回收内存
- JVM 自动内存管理:对象判定和回收算法
- JVM如何判断一个Java对象是否可以回收
- JVM 垃圾回收机制( 一) 回收对象的判定
- jvm如何判断对象是否可以被回收