java类的生命周期-强引用,弱引用,虚引用,软引用

1.强引用

package com.cap3;

public class Test1 {
    static Object strongRefence=new Object();
    public static void main(String[] args) {
       Object object=strongRefence;
       strongRefence=null;
       System.gc();
       System.out.println("After gc->"+object);
    }
}

//打印结果

After gc->java.lang.Object@140e19d

强引用会被回收的情况:

脱离作用域

2.软引用

package com.cap3;

import java.lang.ref.SoftReference;

public class Test1 {
    public static void main(String[] args) {
        Object object=new Object();
        //发生OOM异常前会被回收
        SoftReference<Object> softReference=new SoftReference<Object>(object);
        System.out.println(softReference.get());
        
    }
}

软引用会被回收的情况:

软引用在内存充足的情况下不会被回收,在内存不足的情况下,软引用才会被回收,避免发生OOM

 

3.弱引用

package com.cap3;

import java.lang.ref.WeakReference;

public class Test1 {
    public static void main(String[] args) {
        Object object=new Object();
        WeakReference<Object> weakReference=new WeakReference<Object>(object);
        object=null;
        System.gc();
        System.out.println("After Gc->"+weakReference.get());
    }
}

软引用会被回收的情况:

是个Gc就把他灭了

4.虚引用

package com.cap3;

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

public class Test1 {
    public static void main(String[] args) throws InterruptedException {
        //引用队列
        ReferenceQueue referenceQueue=new ReferenceQueue();
        Object phantomObj=new Object();
        PhantomReference phantomReference=new PhantomReference(phantomObj,referenceQueue);
        phantomObj=null;
        System.gc();
        //System.out.println(phantomReference.get());
        //虚引用要通过引用队列去取值
        Thread.sleep(500);
        System.out.println(referenceQueue.poll());
    }
}

虚引用主要用来追踪对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值