jvm中判定对象需要回收的方法-mile米乐体育

引用计数法

每个对象上都有一个引用计数,对象每被引用一次,引用计数器就 1,对象引用被释放,引用计数器-1,直到对象的引用计数为0,对象就标识可以回收

这个可以用数据算法中的图形表示,对象a-对象b-对象c 都有引用,所以不会被回收,对象b由于没有被引用,没有路径可以达到对象b,对象b的引用计数就就是0,http://www.cppcns.com对象b就会被回收。

但是这个算法有明显的缺陷,对于循环引用的情况下,循环引用的对象就不会被回收。例如下图:对象a,对象b 循环引用,没有其他的对象引用a和b,则a和b 都不会被回收。

root搜索算法

这种算法目前定义了几个root,也就是这几个对象是jvm虚拟机不会被回收的对象,所以这些对象引用的对象都是在使用中的对象,这些对象未使用的对象就是即将要被回收的对象。简单就是说:如果对象能够达到root,就不会被回收,如果对象不能够达到root,就会被回收。

被启动类(bootstrap加载器)加载的类和创建的对象

jvm运行时方法区类静态变量(static)引用的对象

jvm运行时方法去常量池引用的对象

jvm当前运行线程中的虚拟机栈变量表引用的对象

本地方法栈中(jni)引用的对象

jvm在确定是否回收的对象的时候采用的是root搜索算法来实现。

ueue队列的对象进行二次标记,若对象在finalize() 方法中未能逃脱,那么该对象会被二次标记,二次标记的对象判定为需要回收;

(对象可以在 finalize()方法中,将自己和引用链上的对象建立引用关系,这样在第二次标记时,收集器会将其移出回收对象的集合,以此达到逃脱)

到此这篇关于jvm中如何判定对象需要回收的文章就介绍到这了,更多相关jvm判断对象恰卡编程网回收内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图