Android

强软弱虚四大强者

2020-11-26  本文已影响0人  码农修行之路
接下来体验一下四大强者的精神所在:

特点:

  1. 只要有强引用指向一个对象,垃圾回收器就不会回收这个对象
  2. 显式地设置0或者null,或者超出对象的生命周期,此时就可以回收这个对象,具体的回收时机还要看垃圾回收策略
  3. 在不用对象的时候将其赋值为null,能够帮助垃圾回收器回收对象,比如集合claer()

使用场景:图片缓存、网页缓存
图片缓存框架中,“内存缓存”中的图片是这种引用保存,使得JVM在发生oom之前,可以回收这部分缓存

使用场景:静态内部类中,经常会使用弱引用,例如:一个类发送网络请求,承担callback的静态内部类,常用弱引用的方式来保存外部类的引用,当外部类需要被回收时,不会因网络请求没有及时回应,而引起内存泄漏

使用场景:可以用来跟踪对象被垃圾回收的活动

注意:区别于弱引用和软引用:虚引用必须和引用队列(ReferenceQueue)联合使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用添加到与之关联的引用队列中

Object obj = new Object();
ReferenceQueue refQueue = new ReferenceQueue();
PhantomReference<Object> phantom = new PhantomReference<Object>(obj, refQueue);
上一篇下一篇

猜你喜欢

热点阅读