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

标签 java memory memory-management garbage-collection hashmap

所以我这里有一个 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/

相关文章:

c++ - 为什么 malloc(0) 在 "Inside the C++ Object Model?"有用

Java堆分布概念查询

java - Android Studio - Gradle 1.5 --core-library 选项

python - 使用 Scapy 从 pcap 文件读取 session 可以提高内存效率吗

linux - u-boot中的异常向量地址

c++ - 可以为 3rd 方库取代/取代默认 C++ std::allocator 吗?

c - 返回指针时发生内存泄漏

java - 在java中将ObjectID(Mongodb)转换为字符串

java - 使用注册用户登录时 Servlet 会崩溃,但注册帐户后自动登录时不会崩溃

java - 如何计算快速排序中的比较和交换?