华体汇游戏规则玩法
热点资讯
【七彩虹教育】根搜索算法_对象_GCRoots_方法
2025-05-24 17:22 点击次数:56
在根搜索算法中,在 GCRoots 没有可以到达的引用链之后,就一定会 “死亡” 吗?其实也不一定,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行根搜索后发现没有与 GCRoots 相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行 finalize () 方法。当对象没有覆盖 finalize () 方法,或者 finalize () 方法已经被虚拟机调用过,虚拟机将这两种情况都视为 “没有必要执行”。
当这个对象需要执行 finalize () 方法时,这个对象会被放置在一个名为 F-Queue 的队列中,并稍后由一条虚拟机自动建立的、低优先级的 Finalizer 线程去执行。这里的 “执行” 是虚拟机会触发这个方法,但并不一定会等待它运行结束。因为如果对象在 finalize () 方法中死循环或者超长时间执行,可能导致 F-Queue 队列中的其他对象永久处于等待状态,甚至可能导致内存回收系统奔溃。
finalize () 方法是对象可以存活的最后一次机会,在这里可以将自己和引用链上的任何一个对象建立关联即可,否则就会进入到垃圾回收的系统中。但 finalize () 依旧是一种充满不确定性的方法,在诞生之初亦是为了 C/C++ 程序员的更容易接受的一种妥协,推荐目前的 try-finally 方法处理更加优雅,也更安全可靠。
接着我们一起来看看虚拟机中对已经死亡的对象都有哪些垃圾回收是算法。
发布于:湖南省
