java.lang.ref.SoftReference是一个相当新的类,用来实现智能缓存(java.lang.ref.SoftReference is a relatively new class, used to implement smart caches.)。
智能缓存是某种类型数据例如一个已经从硬盘读取的文件或数据库中的一条记录通过SoftReference缓存,如果有其它目的需要内存的话,或内存不足时,Java虚拟机的垃圾回收系统资源,在抛出一个OutOfMemoryError异常之前,它会清除掉被一个Soft Reference使用的对象引用。为了了解它是如何工作的,假定你有一个对象引用,指向一个大数组:
Object obj = new char[1000000];
并且如果可能的话,你打算一直保存这个数组,但是如果内存极其短缺的话,你乐于释放这个数组。你可以使用一个
soft reference:
SoftReference ref = new SoftReference(obj);
Obj是这个soft reference的引用。在以后你用以下的方式检测这个引用:
if (ref.get() == null)// (referent has been cleared)
else// (referent has not been cleared)
如果这个引用已经被清除了,那么垃圾回收器会收回它所使用的空间,并且你缓存的对象也已经消失。
需要注意的是,如果这个指示物还有对它的别的引用,那么垃圾回收器将不会清除它。
这个方案可以被用来实现各种不同类型的缓存,这些缓存的特点是只要有可能对象就会被一直保存下来,但是如果内存紧张对象就被清除掉。


06年热贴
