gpt4 book ai didi

java - 如何防止对象被垃圾收集?

转载 作者:IT老高 更新时间:2023-10-28 21:00:37 25 4
gpt4 key购买 nike

如何防止对象被垃圾回收?

有没有通过 finalize 或 phantom reference 或任何其他方法的方法?

我在一次采访中被问到这个问题。面试官建议可以使用finalize()

最佳答案

保持引用。如果您的对象被过早收集,则表明您的应用程序设计中存在错误。

垃圾收集器只收集应用程序中没有引用的对象。如果没有对象会自然引用收集到的对象,请问问自己为什么要保持它处于 Activity 状态。

您通常没有引用但想要保留对象的一个​​用例是单例。在这种情况下,您可以使用静态变量。单例的一种可能实现如下所示:

public class Singleton {
private static Singleton uniqueInstance;

private Singleton() {
}

public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqInstance;
}
}

编辑:从技术上讲,您可以在终结器中的某处存储引用。这将阻止对象被收集,直到收集器再次确定没有更多引用为止。然而,终结器最多只会被调用一次,所以你必须确保你的对象(包括它的父类(super class))在第一次收集之后不需要被终结。但是,我建议您不要在实际程序中使用此技术。 (这会让像我这样的同事大喊 WTF!?;)

  protected void finalize() throws Throwable {
MyObjectStore.getInstance().store(this);
super.finalize(); // questionable, but you should ensure calling it somewhere.
}

关于java - 如何防止对象被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1329926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com