在Java中,在某些代码中,我希望释放巨大的HashMap<Integer, ArrayList<Integer>>
对象占用的内存。是否足以将其指向null
,如下所示:
Map<Integer, ArrayList<Integer>> complexObject = new HashMap<Integer, ArrayList<Integer>>(1000000);
...
complexObject = null;
答案 0 :(得分:2)
您无法显式取消分配Java对象。但是你可以做到以下几点:
null
来完成此操作。System.gc()
“建议”到JVM运行垃圾收集器,它会释放不再使用的对象,尽管不能保证调用此方法实际上会运行垃圾收集器。答案 1 :(得分:1)
将其引用设置为null将标记它在下次决定运行时可用于垃圾收集器,如果确实没有更多引用放置在任何地方的所述对象。然而,当GC决定运行时,并不是一成不变的。
这是Java与C不同的一个重点,但不要担心。 99.9%的时间你可以信任GC让你回来。
答案 2 :(得分:0)
无法保证释放内存。 GC将运行并提取空值,这样就可以做到。
答案 3 :(得分:0)
我刚读过this article,也有一些关于释放内存的东西。 检查出来,归零并不总能帮助你。