你怎么理解强、软、弱、虚引用?

本文详细介绍了Java中强引用、软引用、弱引用和虚引用的四种对象引用级别,探讨了它们的生命周期、回收时间和应用场景。强引用是常规引用,不会被垃圾回收;软引用在内存充足时不回收,内存紧张时回收;弱引用对象会尽快被回收;虚引用仅用于跟踪对象回收,不决定其生命周期。理解这些引用类型对于优化内存管理和防止内存泄漏至关重要。
摘要由CSDN通过智能技术生成

为了使程序能更加灵活地控制对象的生命周期,从 JDK 1.2 版本开始,JDK 把对象的引用级别分为了以下四种。

这四种级别由高到低依次为:

1. 强引用(StrongReference)

强引用就是我们平常最基本的对象引用,如果是强引用,那回收器不回回收带有强引用的对象。几时内存不足抛出 OutOfMemoryError 异常也不会回收强引用对象,存在即合理吧。

如:

User user = new User("Rookie");

这就是强引用,user 持有了这个对象的存储地址的引用。

2. 软引用(SoftReference)

一个对象只有软引用,如果内存空间足够情况下垃圾回收器就不会回收它,如果内存空间不够了就会对这些只有软引用的对象进行回收。只要垃圾回收器没有回收,该软引用对象就可以继续被程序使用。

所以软引用一般用来实现一些内存敏感的缓存,只要内存空间足够,对象就会保持不被回收掉。

3. 弱引用(WeakReference)

弱引用的对象具有更短暂的生命周期,在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

弱引用可以用来实现一些规范化映射,如 WeakHashMap,当 key 或 value 不再被使用时可以自动被回收。

4. 虚引用(PhantomReference)

虚引用顾名思义就是形同虚设,虚引用并不决定对象的生命周期,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

虚引用主要用来跟踪对象被垃圾回收器回收的活动,虚引用必须和引用队列(ReferenceQueue)联合使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

下面通过一张表格来说明它们的回收时间、用途。

不管这些东西平时有没有用到,我们都必须了解这些机制,这对个人的知识面及拓展是非常有帮助的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值