Java的四种引用,强弱软虚到底有所不同

强度依次降低

  • 强引用 Strong Reference:最为常见,比如new一个对象,这样的变量声明和定义就会产生对该对象的强引用。只要求强引用指向,并且 GC Roots 可达,那么 Java 内存回收时,即使濒临内存耗尽,也不会回收该对象。

  • 软引用 Soft Reference:用SoftReference类实现,一般不会轻易回收,只有内存不够OOM之前才会回收。主要是用来缓存服务器中间计算结果及不需要实时保存的用户行为。例:

    // wrf这个引用是强引用,它是指向SoftReference这个对象的, 
    // 软引用指的是指向new String("str")的引用,也就是SoftReference类中T 
    SoftReference<String> wrf = new SoftReference<String>(new String("str"));
    
  • 弱引用 Weak Reference:用WeakReference类实现,一旦垃圾回收已经启动发现了它,就会回收。当对象只存在弱引用这条路线的时候,那么会在下一次 YGC 时被回收。但由于 YGC 时间不确定性,所以弱引用何时被回收也不确定。

    WeakReference<String> wrf = new WeakReference<String>(new String("str"));
    
  • 虚引用 Phantom Reference:不能单独存在,必须和引用队列联合使用,主要作用是跟踪对象被回收的状态。PhantomReference

    虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中。而其它引用是被JVM回收后才被传入 ReferenceQueue 中的。

    由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue

    PhantomReference<String> prf = new PhantomReference<String>(new String("str"), new ReferenceQueue<>());
    

在这里插入图片描述
愿大家年入百万

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值