【问题标题】:overriding finalize(), referencing object inside it覆盖 finalize(),在其中引用对象
【发布时间】:2015-04-26 02:46:16
【问题描述】:

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

【问题讨论】:

标签: java


【解决方案1】:

来自Javadoc

finalize 方法可以采取任何行动,包括使该对象再次可供其他线程使用。

但是:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2020-05-04
        • 2013-08-15
        • 1970-01-01
        • 2018-06-18
        • 2014-04-28
        • 1970-01-01
        • 2021-10-19
        • 2013-08-28
        相关资源
        最近更新 更多