删除引用以帮助GC的一种好习惯吗?

问题描述

通常不需要。

在以下特定情况下,这是个好主意:

  • 对象很大(即 足够大,您可以照顾
  • 您确定 不再需要 该对象 __
  • 否则, 该对象 将不会超出范围 (例如,您 不会 对周围的对象进行垃圾收集)

但是,如果您发现自己处于这种情况下,我仍然怀疑您有设计上的味道:为什么内部对象与封闭对象的作用域/寿命如此不同?这使我感到怀疑,因为通常当您使用组合物构建对象图时,您期望组合物的寿命相似。

解决方法

我想知道您是否认为删除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?
   }
}

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”