如何清除对象(HashMap)进行垃圾收集 - Java

Abd*_*man 5 java memory garbage-collection memory-management hashmap

所以我在这里有一个java程序,它操纵大量数据并将其存储到对象中(主要是哈希映射).在运行时的某个时刻,数据变得无用,我需要丢弃,这样我就可以释放一些内存.

我的问题是丢弃这些数据被垃圾收集的最佳行为是什么?

我已经尝试过map.clear(),但这还不足以清除地图分配的内存.

编辑(添加我尝试的替代品)

我也尝试过system.gc()来强制垃圾收集器运行,但它没有帮助

Thi*_*ilo 10

HashMap#clear将抛出HashMap中的所有条目,但它不会将其缩小回其初始容量.这意味着你将拥有一个空的支持数组(在你的情况下,我猜)空间可以容纳成千上万的条目.

如果您不打算重新使用HashMap(具有大致相同数量的数据),只需丢弃整个HashMap实例(将其设置为null).

除上述内容外:

  • 如果Map的条目仍被系统的其他部分引用,即使从Map中删除它们也不会被垃圾收集(因为在其他地方需要它们)
  • 垃圾收集在后台发生,并且仅在需要时才发生.因此,您可能不会立即看到大量内存被释放,这可能不是问题.


shi*_*ari 5

 system.gc() 
Run Code Online (Sandbox Code Playgroud)

不推荐使用jvm应该是唯一一个负责所有垃圾收集的人.Class WeakHashMap<K,V>在这种情况下使用.如果密钥不再有效,将自动删除对象

请阅读此链接以供参考

  • 你怎么知道 WeakHashMap 在这里合适? (2认同)