java - 使用 Wea​​kHashMap 减少内存使用

标签 java garbage-collection weakhashmap

WeakHashMap.html 的 Javadoc 中,它说

"Each key object in a WeakHashMap is stored indirectly as the referent of a weak reference. Therefore a key will automatically be removed only after the weak references to it, both inside and outside of the map, have been cleared by the garbage collector."

然后

Note that a value object may refer indirectly to its key via the WeakHashMap itself; that is, a value object may strongly refer to some other key object whose associated value object, in turn, strongly refers to the key of the first value object.

但是WeakHashMap中Key和Value不应该都使用弱引用吗? 即,如果内存不足,GC 将释放值对象所持有的内存(因为在大多数情况下,值对象很可能比键对象占用更多的内存)?

如果 GC 释放了 Value 对象,Key 对象也可以释放吗?

基本上,我正在寻找一个 HashMap,它可以在内存不足时减少内存使用(如果需要,GC 会收集值和键对象)。

Java 中可以吗?

谢谢。

最佳答案

弱引用不适合缓存 - NetBeans 做到了,但可能会变得愚蠢。

SoftReference 就是您想要的。实际上很难做到正确 - 所以复制别人的解决方案。有些人建议您自己显式管理缓存。

引用仅适用于单个引用。有人提议向 Java SE 添加“ephemerons”,但我还没有看到任何具体实现。

关于java - 使用 Wea​​kHashMap 减少内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2473410/

相关文章:

java - 当没有任何内容被重写时,为什么我会收到构造函数中可重写方法调用的警告?

java - 包含线程或 ExecutorServices 的对象的垃圾收集

java - WeakHashMap 的 keySet 条目永远不会为空吗?

java - Android Studio 是如何启动垃圾收集器的,它是如何工作的?

java - Android 强制回收大位图?

java - 如果值包含对键的唯一强引用,是否会收集 WeakHashMap 的条目?

java - 弱引用。当只剩下 WeakReferences 时,对象不会被删除

java - JSON 在发布时递归调用对象

java - 服务器关闭期间无法停止 Bean

java - 如何从超过 100 000 个点创建多边形?