Java “释放”内存的良好实践 [重复]

Java good practices to "free" memory [duplicate]

提问人:lucoski 提问时间:10/28/2023 最后编辑:Mark Rotteveellucoski 更新时间:10/30/2023 访问量:65

问:

这个问题在这里已经有答案了:
26天前关闭。

这篇文章在 26 天前被编辑并提交审核,未能重新打开帖子:

原始关闭原因未解决

我试图了解在 Java 中将变量引用为 null 是否是一种好的做法,以帮助垃圾收集器识别可释放的对象。

当我调用一个方法并实例化一个新对象时,当该方法结束时,我将没有对该对象的引用,因此在这里“无效”变量是没有用的。在 main 方法中实例化的对象呢?

假设我有这样的东西:

List<Integer> l = new ArrayList<>();
for (int i = 0; i < 10; i++) {
   doSomething(l.get(0);
}

我需要这个列表只是为了这个操作,我不会再使用它了。将变量设置为 null 是一种好的做法/有用吗?l

另一个示例可能是在创建要添加到列表中的对象时,如下所示:

List<Integer> l = new ArrayList<>();
Integer intVal0 = 0;
Integer intVal1 = 1;
l.add(intVal0);
l.add(intVal1);
/*Say we'll do something with the list but will never use it again*/

在上面的示例中,我是否应该像(如果应该)对列表所做的那样将 intVal0 和 intVal1 设置为 null?

有人说垃圾收集器足够聪明,可以自己理解它,所以它只会让我的代码看起来很糟糕,其他人则说“无效”变量可以帮助 GC。

我的问题中最重要的部分是,Java 编译器能否理解一个变量是否永远不会再次使用并使显式 null 赋值变得无用(因为我认为如果它能做到这一点,它就会自己赋值 null)?如果它能做到,程序员可以完全依赖它,或者它仍然是一个很好的做法吗?

Java 性能 内存管理 垃圾回收 免费

评论

3赞 markspace 10/28/2023
referencing a variable to null is a good practice不。基本上永远不要这样做。如果你不知道为什么,我认为你需要更多地学习这门语言。
1赞 Stephen C 10/28/2023
有人说垃圾收集器足够聪明,可以自己理解它,所以它只会让我的代码看起来很糟糕,其他人说”无效“变量可以帮助 GC。”- 需要具体的引用!你可以在互联网上找到各种废话。因此,如果您打算使用互联网进行“研究”,请务必记下您找到信息的地点/时间,并考虑其来源的可信度。
1赞 Holger 10/30/2023
如果您考虑设置 和 ,您已经证明垃圾收集器比您更了解这里的意义。在已知对对象的另一个引用仍然存在的情况下设置引用,甚至比一般设置引用更没有意义的。无论如何,表示零个或一个文字的实例永远不会被垃圾回收。因此,正如其他人已经说过的那样,不要浪费时间尝试完成垃圾收集器的工作。intVal0intVal1nullnullnullInteger

答: 暂无答案