美文网首页Android
强软弱虚四大强者

强软弱虚四大强者

作者: 码农修行之路 | 来源:发表于2020-11-26 22:30 被阅读0次
接下来体验一下四大强者的精神所在:
  • 强引用:使用最普遍的引用,一旦一个对象具有强引用,那么垃圾回收器绝不会回收它,当内存空间不足时,java虚拟机宁愿抛出OutOfMemoryError(),也不愿意回收具有强引用的对象释放内存解决内存不足的问题

特点:

  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);
  • 强引用:(GC)垃圾回收不到,即使内存空间不足的时候,jvm宁愿抛出oom,也不会回收,一般会造成内存泄漏,所以在对象不使用的时候可以置为null,帮助GC去进行回收,比如集合clear()
  • 软引用:(GC)垃圾回收不到,只有内存不够用的时候,也就是在oom之前,就会被回收释放,一般在内存保存图片,图片缓存机制中就用到软引用,方便高效的从内存中读取,快速的展示,如果内训不足时,会主动释放回收
  • 弱引用:(GC)会回收该对象,只要垃圾回收扫描到该引用,不管当前内存是否足够,都会被释放回收,常用与内部类持有外部类引用的时候,此时会经常把外部引用放到弱引用中,这样避免内存泄漏
  • 虚引用:(GC)会回收该对象,任何时候都有可能被回收,一般用来跟踪对象被垃圾回收的活动,监听回收情况并可以打印回收日志

相关文章

  • 强软弱虚四大强者

    接下来体验一下四大强者的精神所在: 强引用:使用最普遍的引用,一旦一个对象具有强引用,那么垃圾回收器绝不会回收它,...

  • 强软弱虚引用

    四种引用的区别: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它。软引用:如果一个对象只具有软引用,则内...

  • 强软弱虚引用

    一、强引用(StrongReference) 不会回收有强引用的对象。 除了强引用,其他的引用都需要借助java....

  • 强软弱虚引用

    强引用 简介: 强引用 (Strong Reference) 特征: 只有手动赋值为 null 才会被垃圾回收线程...

  • Java强软弱虚引用

    在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及...

  • 高并发编程之ThreadLocal

    强软弱虚 ThreadLocal 为什么Entry 的key 使用的是弱引用?

  • 强软弱虚引用如何理解

    强引用:我们平时最常使用的基本对象引用,JVM不会回收强引用类型对象,即使内存不足导致OOM也不会回收。 实现一个...

  • Android面试题大全-Java基础篇

    Java基础 内存泄漏的场景 强软弱虚引用分别什么区别 什么场景下使用虚引用 ClassLoader的双亲委派原理...

  • 战胜自己才能成为真正的强者

    强者不是天生的,强者也并非没有软弱的时候,强者之所以成为强者,在于他善于战胜自己的软弱。 一代球王贝利初到巴西最有...

  • Java 引用 强软弱虚 和LruCache

    1.强引用 我们一般 XX a = new XX()就是 强引用,不会被回收,当内存不足时 报出out of me...

网友评论

    本文标题:强软弱虚四大强者

    本文链接:https://www.haomeiwen.com/subject/fqftwktx.html