java虚拟机中如何判断对象已经可以garbage collected

3.java虚拟机中如何判断对象已经可以garbage collected。(引申:如何对链表求环) 
    对象是否存活的算法一般有两种:引用计数算法(java中没有选用此方法来管理内存,最主要的原因是它很难解决对象之间的相互循环引用的问题)和根搜索算法。 
根搜索算法的基本思路就是通过一系列的名为“GC Roots”的对象作为起始点,从这个节点开始向下搜索,搜索所有走过的路径称为引用链,当一个对象到GC
Roots 没有任何引用链相连时,就证明次对象不可用的。不可达的对象,暂时处于“缓刑”阶段,宣告一个对象真正死亡,至少经历两次标记过程:1.如果对象在进行根搜索后发现没有与GC Roots 相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为“没有必要执行”。2.如果这个对象被判定为有必要执行finalize()方法,那么这个对象将会被放置在一个名为F-Queue中的队列之中,并在稍后由一条虚拟机自动建立的、低优先级的Finalizer 线程去执行。finalize()是对象逃脱死亡的最后机会,稍后GC将对F-Queue 中的对象进行第二次小规模的标记,如果对象要在finalize() 中挽救自己——只要重新与引用链上的任何对象建立联系即可。那在第二次标记时它被移除出“即将回收”的集合。 在java语言里,可以作为GC Roots的对象包括以下几种:  A. 栈中的引用的对象。  

B. 方法区中的类静态属性引用的对象。  C. 方法区中的常量引用的对象。  
D. 本地方法栈中JNI-Java Native Interface(一般说的是Native方法)的引用的对象。  
如何对链表求环:两个指针移动方法


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值