Java中的4种类型的引用

本文深入探讨了Java中四种引用类型:StrongReference、SoftReference、WeakReference和PhantomReference的功能与应用场景,提供了清晰的对比分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中一共有4种类型的引用:StrongReference、SoftReference、WeakReference以及 PhantomReference (幽灵引用)。

 

  1. Strong Reference
    StrongReference 是 Java 的默认引用实现,它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时Java GC 执行后将会被回收

  2. SoftReference
    SoftReference 所引用的对象在JVM内部不再有强引用时会被回收(虚拟机保证), 但会尽可能长的保留引用直到 JVM 内存不足时才会回收,这一特性使得 SoftReference 非常适合缓存应用

  3. WeakReference
    WeakReference 当所引用的对象在 JVM 内不再有强引用时, weak reference 将会被自动回收

  4. PhantomReference
    Phantom Reference(幽灵引用) 与 WeakReference 和 SoftReference 有很大的不同,因为它的 get() 方法永远返回 null, 这也正是它名字的由来

    诸位可能要问, 一个永远返回 null 的 reference 要来何用,请注意构造 PhantomReference 时的第二个参数 ReferenceQueue(事实上 WeakReference & SoftReference 也可以有这个参数),PhantomReference 唯一的用处就是跟踪 referent何时被 enqueue 到 ReferenceQueue 中.

对比

Soft vs Weak vs Phantom References
TypePurposeUseWhen GCedImplementing Class
Strong ReferenceAn ordinary reference. Keeps objects alive as long as they are referenced.normal reference.Any object not pointed to can be reclaimed.default
Soft ReferenceKeeps objects alive provided there’s enough memory.to keep objects alive even after clients have removed their references (memory-sensitive caches), in case clients start asking for them again by key.After a first gc pass, the JVM decides it still needs to reclaim more space. java.lang.ref. SoftReference
Weak ReferenceKeeps objects alive only while they’re in use (reachable) by clients.Containers that automatically delete objects no longer in use.After gc determines the object is only weakly reachable java.lang.ref. WeakReference  
java.util. WeakHashMap
Phantom ReferenceLets you clean up after finalization but before the space is reclaimed (replaces or augments the use offinalize ())Special clean up processingAfter finalization. java.lang.ref. PhantomReference

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值