Java基础

finalize()一定执行吗

finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。Java语言规范并不保证finalize方法会被及时地执行、而且根本不会保证它们会被执行

GC执行finalize()流程

首先,大致描述一下finalize流程:当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。

详细细节请看:https://www.cnblogs.com/Smina/p/7189427.html

原文地址:https://www.cnblogs.com/frankcui/p/13564670.html