软引用和弱引用的使用场景

软引用和弱引用

SoftReference(软引用)和WeakReference(弱引用)在JAVA中对应着两个类,在SoftReference类中,有三个方法,两个构造方法和一个get方法(WekReference类似),而当应用它们指向对象时应该如下操作

WeakReference wr = new WeakReference(new String("123"));
SoftReference sr = new SoftReference(new String("123"));

它们的区别主要在于GC时对对象回收时:软引用指向的对象只在内存不足时被回收,而只被弱引用指向的对象在下一次GC时被回收

       软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。

  /软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被JVM回收,这个软引用就会被加入到与之关联的引用队列中,进行其他与该对象相关内存的回收,如HashMap中的Key被回收,则Entry应该被回收。这就是JVM的工作了。

        弱引用对于构造弱集合最有用,WeakHashMap 也被添加到 JDK 1.2 的类库中,它对键(而不是对值)使用弱引用。如果在一个普通 HashMap 中用一个对象作为键,那么这个对象在映射从 Map 中删除之前不能被回收,WeakHashMap 使您可以用一个对象作为Map 键,同时不会阻止这个对象被垃圾收集。WeakHashMap 用弱引用承载映射键,这使得应用程序不再使用键对象时它们可以被垃圾收集,get() 实现可以根据 WeakReference.get() 是否返回 null 来区分死的映射和活的映射。

       软引用解决图片缓存的问题

       https://www.cnblogs.com/dolphin0520/p/3784171.html

       弱应用解决HashMap中的oom问题

       https://www.ibm.com/developerworks/cn/java/j-jtp11225/

 

你可能感兴趣的:(软引用和弱引用的使用场景)