覆盖finalize(),引用其中的对象

时间:2015-04-26 02:46:16

标签: java

如果我覆盖finalize()并引用一个对象会发生什么。这个对象会被垃圾收集吗?从内存中清除该对象的另一种方法是什么?

3 个答案:

答案 0 :(得分:1)

来自Javadoc

  

finalize方法可以采取任何操作,包括将此对象再次提供给其他线程。

然而:

  

对于任何给定对象,Java虚拟机永远不会多次调用finalize方法。

答案 1 :(得分:0)

Finalize()旨在被垃圾收集器调用以删除被引用的对象,如果在调用Finalize()之前重新引用了一个对象,那么你就可以简单地阻止GC破坏它,因为它现在有引用再次它是安全的,假设在它被取消引用期间没有采取,这可能会导致问题。

答案 2 :(得分:0)

请记住,finalize只能由JVM调用一次,因此子序列GC只会运行而不会再给予重新分配引用,保存对象等机会。可能会导致内存泄漏。

相关问题