所以我在这里有一个java程序,它操纵大量数据并将其存储到对象中(主要是哈希映射)。在运行时的某个时刻,数据变得无用,我需要丢弃,这样我就可以释放一些内存。
我的问题是丢弃这些数据被垃圾收集的最佳行为是什么?
我已经尝试过map.clear(),但这还不足以清除地图分配的内存。
编辑(添加我尝试的替代方案)
我也尝试过system.gc()来强制垃圾收集器运行,但它没有帮助
答案 0 :(得分:10)
HashMap#clear将把所有条目都抛出HashMap,但是it will not shrink it back to its initial capacity。这意味着你将有一个空的后备数组(在你的情况下,我猜)空间可以容纳成千上万的条目。
如果您不打算重新使用HashMap(具有大致相同数量的数据),只需丢弃整个HashMap实例(将其设置为null
)。
除上述内容外:
答案 1 :(得分:5)
system.gc()
建议不要使用,因为jvm应该是唯一一个负责所有垃圾收集的人。在这种情况下,请使用 Class WeakHashMap<K,V>
。
如果密钥不再有效,将自动删除对象