美文网首页
JAVA 引用

JAVA 引用

作者: ilaoke | 来源:发表于2018-04-24 10:29 被阅读0次

JAVA中的引用分为强引用,软引用,弱引用,虚引用

强引用

强引用是默认引用,当我们创建一个对象并赋给一个变量,就创建了一个强引用,当没有变量再引用这个对象,下次垃圾回收时对象就会被回收。

public static void normal() {
    Integer i = new Integer(1);
    System.out.println(i); // 1

    i = null; // 之前被引用的对象将在下一次垃圾回收时被回收
}

SoftReference

软引用,当一对象被软引用,那么对象将被JVM尽可能的持有,直到JVM内存不足时才会被回收,适合实现缓存。

public static void soft(){
        Integer i = new Integer(1);
        System.out.println(i); // 1

        SoftReference sr = new SoftReference(i);
        System.out.println(sr.get()); // 1

        i = null;

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

        System.gc();

        System.out.println(sr.get()); // 1
}

执行垃圾回收后,软引用仍然能够取得对象。

WeakReference

弱引用,当一个对象被弱引用,那么对象可能被GC回收也可能没有被回收,具体要通过Reference.get()来判断其返回值是否为空。
弱引用就像一个被强引用的对象,变成没有变量再引用时的状态,将被GC回收。

public static void weak(){
        Integer i = new Integer(1);
        System.out.println(i); // 1

        WeakReference wr = new WeakReference(i);
        System.out.println(wr.get()); // 1

        i = null;

        System.out.println(wr.get()); // 1

        System.gc();

        System.out.println(wr.get()); // null
}

PhantomReference

虚引用,通过Reference.get()总是返回null,所以被虚引用的对象无法再被找回。

public static void phantom(){
    Integer i = new Integer(1);
    System.out.println(i); // 1

    ReferenceQueue<Object> refQueue = new ReferenceQueue<>();
    PhantomReference pr = new PhantomReference(i, refQueue);

    Reference<?> poll = refQueue.poll();
    System.out.println(poll); // null

    System.out.println(pr.get()); // null
    i = null;
    System.out.println(pr.get()); // null
}

https://stackoverflow.com/questions/3329691/understanding-javas-reference-classes-softreference-weakreference-and-phanto
https://www.reddit.com/r/learnjava/comments/3r104u/softreference_vs_weakreference_vs/
http://javaconceptoftheday.com/types-of-references-in-java-strong-soft-weak-and-phantom/
https://stackoverflow.com/questions/299659/whats-the-difference-between-softreference-and-weakreference-in-java
https://www.logicbig.com/tutorials/core-java-tutorial/gc/soft-vs-weak-ref.html

相关文章

  • JAVA四种引用(强引用,弱引用,软引用,虚引用)

    JAVA四种引用(强引用,弱引用,软引用,虚引用) [toc] 参考:Java 的强引用、弱引用、软引用、虚引用四...

  • Java的引用

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

  • Java基础:Java的四种引用

    在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用。包括:强引用,软引用,弱引用,虚引用。这...

  • java引用疑问

    java引用疑问 java 引用:深入分析Object.finalize方法的实现原理 - 简书Java软引用究竟...

  • Weak Reference Soft Reference Ph

    JAVA 中的引用 JAVA 中存在4种引用,由强到弱依次是强引用、软引用、弱引用、虚引用。 强引用(Strong...

  • Reference引用源码解析

    一、JAVA引用 JAVA中有四种引用,强引用、软引用、弱引用、虚引用,而这些引用在代码层次都继承了Referen...

  • Java实现的引用

    引用的分类 Java 1.2以后,除了普通的引用外,Java还定义了软引用、弱引用、虚引用等概念。 强引用:GC ...

  • Glide弱引用缓存与java的强引用、软引用、弱引用、幻象引用

    java的强引用、软引用、弱引用、幻象引用,引用队列总结 java除了原始数据类型的变量,其他所有都是引用类型。 ...

  • 面试题笔记

    Java中引用类型的区别,具体的使用场景 Java中引用类型分为四类:强引用、软引用、弱引用、虚引用。 强引用:强...

  • Java引用及其应用

    Java 引用分类 Java 中的引用分为四种,具体如下 强引用(StrongReference)强引用是使用最普...

网友评论

      本文标题:JAVA 引用

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