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

软引用和弱引用

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

WeakReference<String> wr = new WeakReference(new String("123"));
SoftReference<String> 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/

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值