2

在 Java 中,在代码中的某个时刻,我想释放一个巨大HashMap<Integer, ArrayList<Integer>>对象占用的内存。是否足以将其指向null如下:

Map<Integer, ArrayList<Integer>> complexObject = new HashMap<Integer, ArrayList<Integer>>(1000000);
...
complexObject = null;

?

4

4 回答 4

2

您不能显式取消分配 Java 对象。但您可以执行以下操作:

  1. 删除对不再需要的项目的所有引用。您可以通过将对象的唯一引用设置为null.
  2. 调用System.gc()“建议”到 JVM 以运行垃圾收集器,这会释放不再使用的对象,但不能保证调用此方法会实际运行垃圾收集器。
于 2013-02-21T21:54:56.477 回答
1

如果在任何地方确实没有对所述对象的引用,则将其引用设置为 null 将在下次决定运行时将其标记为可用于垃圾收集器。然而,当 GC 决定运行时,并不是一成不变的。

这是Java与C不同的一个重要点,但不要担心。99.9% 的时间您可以相信 GC 会为您提供支持。

于 2013-02-21T21:54:46.180 回答
0

不能保证释放内存。GC 将运行并拾取空值,所以这就是你所能做的。

于 2013-02-21T21:55:21.283 回答
0

我刚读了这篇文章,里面也有关于释放内存的内容。看看吧,归零并不总是对你有帮助。

于 2013-02-21T22:05:52.673 回答