java - 删除引用以帮助 GC 是一种好习惯吗?

标签 java garbage-collection

我想知道您是否认为删除对对象的引用(将它们设置为 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?
   }
}

最佳答案

通常不需要。

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

  • 对象很大(即大到您可以照顾)
  • 您确定不再需要该对象
  • 该对象不会超出范围(例如,您知道周围的对象不会被垃圾回收)

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

关于java - 删除引用以帮助 GC 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16035076/

相关文章:

java - Android 绑定(bind)和 MVVM : unreported Exception; must be caught

java - G1 gc 日志没有显示长时间 gc 暂停的线索

javascript - 如果对象是通过引用复制的,为什么 JavaScript 垃圾回收会这样工作?

java - GC实时时间显着延长

java - 使用 hibernate-validator 和 javax.validation :validation-api:1. 1.0.Final) 和 glassfish-embedded-all?

java - Dagger 无法提供我的依赖项

java - 刚刚将带有 War 文件的 EAR 部署到 Jboss 6.1 部署目录。默认 http 端口号是多少?

Java:WeakReference.get() 在 System.gc() 之后返回不同

java - 可以增加引用旧对象的 gc 时间短命对象吗?

java - 如何在 Java 中使用 StringUtils?