你什么时候会使用WeakHashMap或WeakReference? WeakReference对SoftReference

2022-08-31 07:05:12

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


答案 1

强引用的一个问题是缓存,特别是对于非常大的结构,如图像。假设您有一个应用程序,它必须使用用户提供的图像,例如我使用的网站设计工具。当然,您希望缓存这些图像,因为从磁盘加载它们非常昂贵,并且您希望避免同时在内存中具有两个(可能是巨大的)图像副本的可能性。

因为图像缓存应该防止我们在不是绝对需要的时候重新加载图像,所以您很快就会意识到缓存应该始终包含对内存中已有的任何图像的引用。但是,对于普通的强引用,该引用本身将强制图像保留在内存中,这要求您以某种方式确定何时不再需要该图像在内存中并将其从缓存中删除,以便它符合垃圾回收的条件。您被迫复制垃圾回收器的行为,并手动确定对象是否应在内存中。

理解弱引用,伊桑·尼古拉斯


答案 2

WeakReferenceSoftReference

需要明确的一个区别是弱引用软引用之间的区别。

基本上,一旦引用的对象没有引用,JVM就会热切地将GC-d。另一方面,d对象往往会被垃圾回收器留下,直到它真正需要回收内存。WeakReferenceSoftReference

保存在 s 内的缓存将非常无用(在 中,它是弱引用的键)。 当您想要实现可以随可用内存增长和收缩的缓存时,将值包装在一起很有用。WeakReferenceWeakHashMapSoftReferences


推荐