使用Java在运行时删除复杂对象

时间:2013-02-21 21:52:23

标签: java null garbage-collection

在Java中,在某些代码中,我希望释放巨大的HashMap<Integer, ArrayList<Integer>>对象占用的内存。是否足以将其指向null,如下所示:

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

4 个答案:

答案 0 :(得分:2)

您无法显式取消分配Java对象。但是你可以做到以下几点:

  1. 删除对您不再需要的项目的所有引用。您可以通过将对象的唯一引用设置为null来完成此操作。
  2. 调用System.gc()“建议”到JVM运行垃圾收集器,它会释放不再使用的对象,尽管不能保证调用此方法实际上会运行垃圾收集器。

答案 1 :(得分:1)

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

这是Java与C不同的一个重点,但不要担心。 99.9%的时间你可以信任GC让你回来。

答案 2 :(得分:0)

无法保证释放内存。 GC将运行并提取空值,这样就可以做到。

答案 3 :(得分:0)

我刚读过this article,也有一些关于释放内存的东西。 检查出来,归零并不总能帮助你。