Java的四种引用方式

我们都知道,java垃圾回收都是由JVM自动进行的,而垃圾回收机制的根据就在于该对象有没有引用。
Java共有四种引用方式:

  1. 强引用
  2. 软引用
  3. 弱引用
  4. 虚引用

强引用

创建一个对象并将其赋给一个引用变量,这就是强引用,而强引用的特点在于,引用的变量永远不会被GC回收,即使发生内存溢出,照样不会!

软引用

软引用(SoftReference),如果一个对象是被软引用,当内存足够时,就不会对它进行垃圾回收,如果内存不够时,才会对它进行回收。而JVM对于软引用的回收也是根据软引用中被闲置的时间长短来决定,对于长时间被闲置的弱引用对象,JVM会优先回收。在需要高速缓存的情况下,软引用可以起到很好的效果。

弱引用

弱引用(WeakReference),只要开始垃圾回收,弱引用对象一定会被回收,以下面这段代码为例,

public class WeakReferenceDemo {
    public static void main(String[] args) {
        Object A=new Object();
        WeakReference<Object> weakReference=new WeakReference<>(A);
        System.out.println(A);
        System.out.println(weakReference.get());
        A=null;
        System.out.println("==================");
        System.out.println(A);
        //手动设置垃圾回收
        System.gc();
        System.out.println(weakReference.get());

    }
}

得到结果如下:

java.lang.Object@1540e19d
java.lang.Object@1540e19d
==================
null
null

虚引用

虚引用(PhantomReference),相对于其他三种引用方式来讲,虚引用有种形同虚设的感觉,不论什么时候,虚引用的get()方法返回的总是null,一个对象被虚引用,其实就跟没有引用一样,垃圾回收器可以随时将其回收,而虚引用和其他三种引用方式不同的是,在使用虚引用时,都要配合引用队列(ReferenceQueue)使用,当垃圾回收期回收对象时,如果发现对象存在虚引用,就会将这个虚引用加入到它的引用队列中,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值