java - 在 Java 中强制释放大型缓存对象

标签 java garbage-collection

我使用大型(数百万)条目哈希图来缓存算法所需的值,键是两个对象的组合。由于它不断增长(因为 map 中的键发生变化,因此不再需要旧的),能够强制删除其中包含的所有数据并在执行期间重新开始会很好,有没有办法有效地做在 Java 中?

我的意思是释放相关的内存(大约 1-1.5gb 的 hashmap)并从空的 hashmap 重新启动..

最佳答案

您可以调用HashMap.clear() .这将删除所有数据。请注意,这只会丢弃所有条目,但会保持用于存储条目的内部数组大小相同(而不是缩小到初始容量)。如果您还需要消除它,最简单的方法是丢弃整个 HashMap 并用新实例替换它。当然,这只有在您控制谁拥有指向 map 的指针时才有效。

至于回收内存,您将不得不让垃圾收集器完成它的工作。

你的值(value)观也很长吗?在这种情况下,您可能希望查看更(内存)效率
实现比通用 HashMap,例如 GNU Trove library 中的 TLongLongHashMap .那应该可以节省很多内存。

关于java - 在 Java 中强制释放大型缓存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406349/

相关文章:

java - 垃圾收集器运行异常是不是内存泄漏?

Java 垃圾收集——新的阈值

java - 从文件名生成唯一的 IRI

java - 采取动态输入的一副纸牌

java - 这段代码有什么问题

c# - 拥有一次性字段的类型应该是一次性的。如何解决这个警告?

go - 增加 GO 中的堆大小

java - 线程如何查看安全初始化对象的陈旧引用

java - 如何按先数字字母后数字对字符串列表进行排序

c# - .NET 垃圾收集器之谜