java - 为什么 MapMaker.softKeys() 被弃用?

标签 java guava weak-references

Possible Duplicate:
Why is softKeys() deprecated in Guava 10?

原因MapMaker.softKeys() JavaDoc 中已弃用:

Use softValues to create a memory-sensitive map, or weakKeys to create a map that doesn't hold strong references to the keys. This method is scheduled for deletion in January 2013.

This method is broken. Maps with soft keys offer no functional advantage over maps with weak keys, and they waste memory by keeping unreachable elements in the map. If your goal is to create a memory-sensitive map, then consider using soft values instead.

Specifies that each key (not value) stored in the map should be wrapped in a SoftReference (by default, strong references are used). Softly-referenced objects will be garbage-collected in a globally least-recently-used manner, in response to memory demand.

我不明白为什么软值优先于软键?有什么场景吗? MapMaker.softValues()仍然可用。谢谢!

最佳答案

包含软元素和弱元素的 map 有两个主要用例:

  • 缓存。具有软值的映射可以充当内存敏感的缓存。由于软引用的语义,当需要空闲内存时会收集缓存的条目。

  • 规范化映射。有时您需要将附加属性(值)与现有对象(键)相关联。这种关联不应该阻止 key 被收集,并且在收集 key 后它没有任何意义。这样的关联可以被实现为具有弱键的映射。

请注意,在后一种情况下使用软键而不是弱键没有任何意义,并且会导致不必要的内存使用,因此软键没有实际用途,这就是不推荐使用它们的原因。

关于java - 为什么 MapMaker.softKeys() 被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758001/

相关文章:

ios - 弱 IBOutlet UIView 属性将变为 nil

java - WeakReference 对象是否也与引用对象一起被垃圾收集?

Java小程序使用httprespon

java - 我认为我可能误解了 Map 类方法

java - 如何在 Java 客户端中启用 GOST 密码

java - 为什么 checkNotNull() 没有注解 @Nonnull

java - 使用 Guava 将两个列表压缩到 Java 8 中的不可变多重映射中?

java - 我不应该在 Spring Boot 项目中使用 'new' 关键字吗?

java - Guava、Files.readLines() 和空白

objective-c - 类方法,其中 self 如果在 block 中使用