finalize方法

回答
爱扬教育

2022-06-30

  • 相关推荐
finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或掉),但Java中的finalize的调用具有不确定性

扩展资料

  不建议用finalize方法完成“非内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法。

  finalize的问题:

  一些与finalize相关的方法,由于一些致命的缺陷,已经被废弃了,如System.runFinalizersOnExit()方法、Runtime.runFinalizersOnExit()方法

  System.gc()与System.runFinalization()方法增加了finalize方法执行的机会,但不可盲目依赖它们

  Java语言规范并不保证finalize方法会被及时地执行、而且根本不会保证它们会被执行

  finalize方法可能会带来性能问题。因为JVM通常在单独的低优先级线程中完成finalize的执行

  对象再生问题:finalize方法中,可将待回收对象赋值给GC Roots可达的对象引用,从而达到对象再生的目的

  finalize方法至多由GC执行一次(用户当然可以手动调用对象的finalize方法,但并不影响GC对finalize的行为)