SoftReference(软引用)是Java中一种弱化了引用强度的引用方式。SoftReference所指向的对象在系统内存充足时不会被回收,但在系统内存不足时则有可能会被回收。
SoftReference的主要用途在于缓存一些可能会频繁访问但不必保留在内存中的数据。例如,Java中的图片缓存常常使用SoftReference来缓存图片,该缓存策略可以在图片过期或系统内存不足时自动清除已经不再使用的图片对象,避免了内存泄漏。
与WeakReference(弱引用)的区别在于,SoftReference在Java虚拟机内存不足时可能会被回收,而WeakReference对象则更容易被回收。
SoftReference(软引用)是Java中一种弱化了引用强度的引用方式,用于缓存一些可能会频繁访问但不必保留在内存中的数据。该引用方式在Java的缓存策略中应用广泛。
1.SoftReference详解
SoftReference,即软引用,是Java中引用类型的一种。在Java中,引用可以分为强引用、软引用、弱引用和虚引用四种类型。与强引用相同,软引用指向对象的引用也不会被垃圾回收机制自动回收。不同的是,当垃圾回收器在内存不足并决定进行一次垃圾回收时,如果对于某个对象来说,只有一个软引用指向它,那么这个对象就会被回收。
softreference可以配合缓存一起使用,由于缓存中存在对该对象的软引用,故在虚拟机所能容纳下的内存空间有限时,缓存中的对象可能被垃圾回收器回收,从而动态地调节缓存的容量,充分利用有限的语言环境存储空间。
SoftReference的实现
JDK1.2中提供了Reference类及其子类,SoftReference是其子类之一,该类定义了一个模板方法Reference.get()用于获取引用所指向的对象,另外还提供了一个clear()方法用于清空引用,使引用指向null。当垃圾回收器收集到可回收对象并确定删除时,会依次run此引用队列中注册的处理器,并出击队列中被注册的引用,这样,即可实现缓存的动态调整。
SoftReference是Java中的一种引用方式,在Java的缓存策略中应用广泛。它可以与缓存一起使用,动态调节缓存的容量,充分利用有限的语言环境存储空间。SoftReference的实现依赖于JDK1.2中提供的Reference类及其子类。