美文网首页
Java的四种引用方式

Java的四种引用方式

作者: 积木Blocks | 来源:发表于2018-09-11 01:35 被阅读78次

1.强引用


  • 默认的引用类型
  • 如果一个对象具有强引用,那么垃圾回收器是不会对它进行回收的,当内存不足的时候,Java虚拟机将抛出OutOfMemoryError错误。
  • 如果想切断强引用和某个对象的关联,可以显式地将引用赋值为null,JVM在合适的时间就会回收该对象

2.软引用 SoftReference


  • 如果一个对象只有软引用,内存充足的时候,垃圾回收器不会对它进行回收操作,
  • 当内存不足的时候,这个对象会被回收。
  • 实现内存敏感的高速缓存
  • 配合ReferenceQueue使用,当软引用指向的对象被垃圾回收器回收后,Java虚拟机将会把这个软引用加入到与之关联的引用队列中。

3.弱引用 WeakReference


  • 弱引用比软引用更弱
  • 只有弱引用指向的对象的生命周期更短,当垃圾回收器扫描到只具有弱引用对象时,不论当前内存空间是否不足,都会对弱引用进行回收。
  • 不过垃圾回收器是优先级较低的线程,不能迅速发现弱引用
  • 配合ReferenceQueue使用,当弱引用指向的对象被垃圾回收器回收后,Java虚拟机将会把这个弱引用加入到与之关联的引用队列中。

4.虚引用 PhantomReference


  • 和软引用,弱引用不同,虚引用不会对所指向的对象生命周期产生影响
  • 本质是一个标记作用,用来跟踪对象被垃圾回收的活动,虚引用必须和队列配合使用
  • 配合ReferenceQueue使用,当虚引用指向的对象被垃圾回收器回收后,Java虚拟机将会把这个虚引用加入到与之关联的引用队列中。

5. 引用队列 ReferenceQueue


  • 配合软引用,弱引用,虚引用使用,当引用的对象将要被JVM回收时,会将其加入到引用队列中。
  • 通过引用队列可以了解JVM垃圾回收情况。

6.使用场景


  • 利用软引用和弱引用解决OOM问题:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的问题
  • 通过软可及对象重获方法实现Java对象的高速缓存:
    • 比如我们创建了一Employee的类,如果每次需要查询一个雇员的信息。哪怕是几秒中之前刚刚查询过的,都要重新构建一个实例,这是需要消耗很多时间的。我们可以通过软引用和 HashMap 的结合,先是保存引用方面:以软引用的方式对一个Employee对象的实例进行引用并保存该引用到HashMap 上,key 为此雇员的 id,value为这个对象的软引用,另一方面是取出引用,缓存中是否有该Employee实例的软引用,如果有,从软引用中取得。如果没有软引用,或者从软引用中得到的实例是null,重新构建一个实例,并保存对这个新建实例的软引用

参考:《Android高级进阶》-顾浩鑫

相关文章

  • Java的引用

    参考链接: Java到底是值传递还是引用传递 Java的四种引用方式 Java中的强引用、软引用、弱引用和虚引用 ...

  • ThreadLocal内存泄漏问题

    java对象的四种引用方式 对象的引用方式分:强、软、弱、虚四种 强引用 普通的写法即强引用 当GC回收时,拥有强...

  • java四种引用

    java存在着四种饮用方式,他们是 这四种引用方式和jvm垃圾回收有着密切的联系。 1. 强引用 所有new出来的...

  • Android使用LeakCanary检测内存泄漏

    Java四种引用 在Java中,有四种不同的引用类型,分别是强引用(Strong Reference)、软引用(S...

  • Java中的四种引用类型

    一、Java中的四种引用类型 JDK 1.2 开始 Java 提供了四种引用类型,分别是强引用、软引用、弱引用、虚...

  • Java四种引用-Android面试准备2019-1-22

    四种引用 1.强引用(StrongReference) 这是Java程序中最常见的引用方式。程序创建一个对象,并把...

  • java四种引用类型

    java中得四种引用 Java中有四种引用类型:强引用、软引用、弱引用、虚引用 强引用我们代码中常写,如: Obj...

  • Java如何有效避免OOM:善于利用软引用和弱引用

    从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。 四种引用类型的作用 Java中提...

  • Android 内存优化

    1.java的四种引用方式强引用,软引用,弱引用,虚引用 打印的结果有点问题,弱引用在GC回收之后应该也是null...

  • Java对象的四种引用类型

    从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。 Java中提供这四种引用类型主要...

网友评论

      本文标题:Java的四种引用方式

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