因此,我在这里拥有的是一个Java程序,该程序可以处理大量数据并将其存储到对象(主要是哈希映射)中。在运行时间的某个时刻,数据变得无用,我需要丢弃数据,以便释放一些内存。

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

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

编辑(添加我尝试过的替代方法)

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

最佳答案

HashMap#clear会将所有条目扔出HashMap,但丢弃it will not shrink it back to its initial capacity。这意味着您将有一个空的支持数组,其中(对于您而言,我想是)有成千上万个条目的空间。

如果您不打算重复使用HashMap(数据量大致相同),则只丢弃整个HashMap实例(将其设置为null)。

除上述内容外:

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