再谈引用:软引用
软引用( Soft Reference ) -内存不足即回收
- 软引用是用来描述一些还有用,但非必需的对象。只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常。
- 软引用通常用来实现内存敏感的缓存。比如:高速缓存就有用到软引用。如果还有空闲内存,就可以暂时保留缓存,当内存不足时清理掉,这样就保证了使用缓存的同时,不会耗尽内存。
- 垃圾回收器在某个时刻决定回收软可达的对象的时候,会清理软引用,并可选地把引用存放到一个引用队列( Reference Queue) 。
- 类似弱引用,只不过Java虚拟机会尽量让软引用的存活时间长一一些,迫不得已才清理。
在JDK 1. 2版之后提供了java. lang. ref. SoftReference类来实现软引用。
0bject obj = new 0bject(); //声明强引用 SoftReference<object> sf = new SoftReference<Object> (obj); obj = null; //销毁强引用
软引用:
当内存足够:不会回收软引用的可达对象
当内存不够时:会回收软引用的可达对象