Java中的强引用和弱引用是什么?

首先我们需要了解一下JVM的垃圾回收机制

JVM会自动地分配和释放对象的内存。JVM使用垃圾回收器来识别和回收不再被程序使用的对象,以释放它们占用的内存空间。垃圾回收器周期性地扫描堆内存,找出哪些对象是不可达的,然后回收它们占用的内存。垃圾回收器使用可达性分析算法来判断对象是否可达。从根节点(例如局部变量或静态变量)开始遍历引用链,如果某个对象不可达,则认为它是垃圾,可以被回收。

 不了解内存泄露和可达性算法的的可以查看我之前的博客内存泄漏是什么?发生在什么场景?如何解决?-CSDN博客

可达性分析算法是什么?用于什么场景?解决什么问题?-CSDN博客

强引用

强引用是最普遍的引用类型。当一个对象被强引用指向时,它就不会被垃圾回收器回收。即使内存不足,JVM也不会回收强引用指向的对象。

Object obj = new Object(); // obj是一个强引用

在这个例子中,只要obj引用存在,Object实例就不会被回收。如果没有其他引用指向这个对象,则它会被垃圾回收器回收。强引用的特点:

  1. 只要强引用存在,垃圾回收器就不会回收被引用的对象。
  2. 容易导致内存泄漏,尤其是在引用链较长的情况下。
  3. 适用于需要长期保持对象的场景,例如缓存、单例模式等。

软引用

软引用是一种相对于强引用的弱引用类型。当内存不足时,JVM会回收软引用指向的对象。软引用通常用于实现内存敏感的缓存。

SoftReference<Object> softRef = new SoftReference<>(new Object());

在这个例子中,如果内存不足,JVM会回收softRef指向的对象,即使softRef仍然存在。软引用的特点:

  1. 在内存不足时,软引用指向的对象会被回收。
  2. 适用于实现内存敏感的缓存,可以在内存不足时自动释放缓存。
  3. 可以通过get()方法检查软引用是否已经被回收。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值