Java 引用

Posted 赵杰A-124

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 引用相关的知识,希望对你有一定的参考价值。

Java 对象的引用方式有如下四种,这四种方式主要是为了给垃圾回收提供更灵活的操作:

1、强引用,最常见的引用方式,当一个对象被一个或一个以上的引用变量引用时,它处于可达状态,这时不会被垃圾回收器回收。

2、软引用(SoftReference),通常用于内存敏感的程序中,当一个对象只有软引用时,当系统空间足够时,系统不会回收它,当系统空间不够时,系统可能回收它。

3、弱引用(WeakReference),不管系统空间是否足够,总会回收该对像所占用的内存。

4、虚引用(PhangtomReference),类似与完全没有引用,虚引用主要用于跟踪对象被垃圾回收的状态,它不能单独使用,必须和引用队列(ReferenceQueue)一起使用,当该引用的对象被垃圾回收之后,虚引用将进入引用队列中,虚引用不能通过get方法,获取正常的引用。

示例如下:

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

public class PhantomReferenceTest {

    public static void main(String[] args) {
        String str = new String("Hello World");
        ReferenceQueue referenceQueue = new ReferenceQueue<>();
        
        PhantomReference<String> phantomReference = new PhantomReference<String>(str, referenceQueue);
        
        str = null;
        
        System.out.println(phantomReference.get());
        
        System.gc();
        System.runFinalization();
        
        System.out.println(referenceQueue.poll() == phantomReference);
    }

}

运行结果:

null
true

虚引用不能通过虚引用访问被引用的对象,但是当垃圾回收后,虚引用进入了ReferenceQueue。

以上是关于Java 引用的主要内容,如果未能解决你的问题,请参考以下文章

引用向量的部分片段?

片段对话框对活动的松散引用

Java中String的 "引用" 传递

一道经典面试题:字符串在Java中如何通过“引用”传递

五String在Java中是传“引用”

未解决的对“片段”部分中的符号“”的引用