android的四种引用

作者: 逐鹿者不见山 | 来源:发表于2016-10-24 21:27 被阅读457次

强引用:普通new对象的引用

User user = new User();

jvm宁愿抛出OutOfMemory异常也不会去回收该对象

软引用

SoftReference引用的装饰的对象,该对象的强引用应该赋值空

这里配合ReferenceQueue使用(也可以不配合),因为SoftReference本身也是new了一个对象

当他把别人的问题解决掉以后,也需要把自己的问题解决,所以当jvm把软引用

对象回收后,就会把自己的对象引用放到这个队列中,我们可以通过队列的poll()

方法查看,如果存在该ReferenceQueue,那么就说明该对象的软引用对象已经被jvm

回收,我们需要将该ReferenceQueue引用也赋值为空,等待被jvm回收。

注意:软引用对象是在jvm内存不够的时候才会被回收,我们调用System.gc()方法只是

起通知作用,jvm什么时候扫描回收对象是,是jvm自己的状态决定的。就算扫描到软引用

对象也不一定会回收它。只有内存不够的时候才会回收

ReferenceQueue queue = new ReferenceQueue();

User user = new User();

SoftReference ref=new SoftReference(user, queue);

user=null;

弱引用:弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,只要扫描到,

无论内存是否充足(与软引用的区别),都会回收被弱引用关联的对象。在java中,

用java.lang.ref.WeakReference类来表示

WeakReference sr = new WeakReference(new User());

System.out.println(sr.get());

System.gc(); //通知JVM的gc进行垃圾回收,但是之前使用的时候调用这个,下边输出不为null,暂时原因未明

System.out.println(sr.get());

虚引用

虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。

在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,

则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

要注意的是,虚引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,

如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。

程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。

如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

ReferenceQueue queue = new ReferenceQueue();

PhantomReference pr = new PhantomReference(new User(), queue);

System.out.println(pr.get());//但是之前使用的时候调用这个,下边直接报错,暂时原因未明

相关文章

  • Java/Android引用类型及其使用分析

    Java/Android中有四种引用类型,分别是: Strong reference - 强引用 Soft R...

  • 解决弱引用的疑问

    对于Android对象的四种引用相信大家都不陌生,由强到弱分别是:强引用、软引用、弱引用和虚引用。本文主要说的是弱...

  • Android 引用

    引用,用于操作对象 一个对象可以被多个引用持有,且可以是被不同的引用持有Android有四种引用1.强引用(Str...

  • Java四种引用对比

    前言 面试题:Java中的软引用,弱引用在Android 是哪个的使用 目录 一:哪四种引用 二:区别在哪 三:在...

  • Android 四种引用比较与源码分析

    目录介绍 0.关于四种引用0.1 引用说明0.2 关于Java下ref包和Android下ref包 1.强引用1....

  • android的四种引用

    强引用:普通new对象的引用 User user = new User(); jvm宁愿抛出OutOfMemory...

  • Android面试Java基础篇(四)

    问:Java中四种引用类型 答:四种引用类型分别为 强引用、弱引用、软引用、虚引用 强引用(StrongRefer...

  • java四种引用类型

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

  • Java中的四种引用类型

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

  • Android使用LeakCanary检测内存泄漏

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

网友评论

    本文标题:android的四种引用

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