java四种引用类型

Java引用分为四种类型:强软弱虚

1 强引用,我们平时用的引用,被它指向的对象,一定会被可达性分析搜索到,gc阶段会幸存下来

2 软引用,地位稍低于强引用,一般用于缓存,内存不足时才会被回收。软引用是用包装的方法实现的,也就是一个强引用指向一个SoftReference对象,这个对象再指向真的对象

import java.lang.ref.SoftReference;

public class SoftReferenceExample {

    public static void main(String[] args) {
        // 创建一个字符串对象,加上软引用
        SoftReference<String> softRef = new SoftReference<String>(new String("Hello World"));

        // 尝试获取软引用所引用的对象,如果对象未被回收,则输出该对象的内容
        if (softRef.get() != null) {
            System.out.println("SoftReference: " + softRef.get());
        }

        // 手动触发垃圾回收
        System.gc();

        // 再次尝试获取软引用所引用的对象,如果对象被回收,则输出"Object has been collected."
        if (softRef.get() == null) {
            System.out.println("Object has been collected.");
        }
    }
}

3 弱引用,地位稍低于软引用,一般用于防止内存泄漏,内存充足时依旧会被回收。弱引用是用包装的方法实现的,也就是一个强引用指向一个WeakReference.这个对象再指向真的对象

如果红色标记这里是强引用,那么哪时tl1引用编程空,threadlocal对象也不会消失,这就是内存泄漏问题了

  (每个线程都已一个threadlocalmap,key是threadlocal,通过这种方式,实现了变量的多个副本) 

4 虚引用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值