所以我这里有一个 java 程序,它可以处理大量数据并将其存储到对象(主要是 HashMap )中。在运行时间的某个时刻,数据变得无用,我需要丢弃,以便释放一些内存。
我的问题是丢弃这些数据以进行垃圾收集的最佳行为是什么?
我已经尝试过 map.clear(),但是这不足以清除 map 分配的内存。
编辑(添加我尝试过的替代方案)
我也试过 system.gc() 来强制垃圾收集器运行,但是它没有帮助
最佳答案
HashMap#clear 会将所有条目抛出 HashMap,但是 it will not shrink it back to its initial capacity .这意味着您将有一个空的后备数组(在您的情况下,我猜)有数万个条目的空间。
如果您不打算重新使用 HashMap(数据量大致相同),只需丢弃整个 HashMap 实例(将其设置为 null
)。
除上述之外:
- 如果 Map 的条目仍然被系统的其他部分引用,即使它们从 Map 中删除也不会被垃圾收集(因为其他地方需要它们)
- 垃圾收集在后台进行,并且仅在需要时进行。因此,您可能不会立即看到大量内存被释放,这可能不是问题。
关于java - 如何清除要进行垃圾收集的对象(HashMap)-Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407307/