通过使用一个软引用来管理高速缓存的缓冲区,可以解决 leakychecksum 中的问题,如清单 2 所示。现在,只要不是特别需要内存,缓冲区就会被保留,但是在需要时,也可被垃圾收集器回收:
清单 2. 用软引用修复 leakychecksum
public class cachingchecksum { private softreference |
一种廉价的缓存
cachingchecksum 使用一个软引用来缓存单个对象,并让 jvm 处理从缓存中取走对象时的细节。类似地,软引用也经常用于 gui 应用程序中,用于缓存位图图形。是否可使用软引用的关键在于,应用程序是否可从大量缓存的数据恢复。
如果需要缓存不止一个对象,您可以使用一个 map,但是可以选择如何使用软引用。您可以将缓存作为 map
对于在性能上非常依赖高速缓存的应用程序来说,软引用是一个不管用的手段,它确实不能取代能够提供灵活终止期、复制和事务型高速缓存的复杂的高速缓存框架。但是作为一种 “廉价(cheap and dirty)” 的高速缓存机制,它对于降低价格是很有吸引力的。
正如弱引用一样,软引用也可创建为具有一个相关的引用队列,引用在被垃圾收集器清除时进入队列。引用队列对于软引用来说,没有对弱引用那么有用,但是它们可以用于发出管理警报,说明应用程序开始缺少内存。