我想知道您是否认为删除对对象的引用(将它们设置为null
)以帮助Java垃圾收集器是一个好习惯。
例如,假设您有一个包含两个字段的类,其中一个非常消耗内存。如果您知道只需要将其用于特定处理,则可以在之后立即将其为空以帮助GC。
假设我确实需要这两个字段,而不仅是内部变量,因此heavyObject1
在方法末尾不能超出范围。
您会作为常规做法这样做吗?
public class TestClass {
public static Object heavyObject1;
public static Object object2;
private static void action() {
object2 = doSomething(heavyObject1);
heavyObject1 = null; //is this good?
}
}
最佳答案
通常不需要。
在以下特定情况下,这是个好主意:
但是,如果您发现自己处于这种情况下,我仍然怀疑您有设计上的气味:为什么内部对象与封闭对象的作用域/生存期如此不同?这使我感到怀疑,因为通常当您使用组合对象构建对象图时,您期望组合对象具有相似的生存期。