何时使用WeakHashMap或WeakReference?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

弱引用的使用是我从未见过的实现,所以我试图弄清楚它们的用例是什么以及实现如何工作。你什么时候需要使用WeakHashMapor WeakReference,以及它是如何使用的?

提问于
用户回答回答于

强引用的一个问题是缓存,特别是像图像这样的非常大的结构。假设你有一个应用程序必须使用用户提供的图像,比如我工作的网站设计工具。当然,你想要缓存这些图像,因为从磁盘加载它们非常昂贵,并且你希望避免一次在内存中有两个(可能是巨大的)图像副本的可能性。 由于图像缓存在我们不需要的时候会阻止我们重新加载图像,因此您会很快意识到缓存应该始终包含对已存在于内存中的任何图像的引用。但是,对于普通的强引用,引用本身会强制映像保留在内存中,这要求你以某种方式确定内存中不再需要映像并将其从缓存中移出以便它符合垃圾回收的条件。你不得不复制垃圾收集器的行为,并手动确定一个对象是否应该在内存中。

用户回答回答于

一个明确的区别是 WeakReferenceSoftReference之间的区别。

基本上WeakReference,一旦被引用的对象没有被引用,JVM就会热切地注意到GC-d 。一个SoftReference在另一方面d对象,往往会被垃圾收集器留约,直到它真正需要回收内存。

一个将保存在WeakReferences中的缓存将非常没用(在WeakHashMap,它是弱引用的键)。SoftReferences在你想要实现一个缓存时可以用这个值来包装这些值,这个缓存可以随着可用内存的增大和缩小而变化

扫码关注云+社区