Java中有哪几种引用类型?

在Java中,除了强引用(Strong Reference)外,还有三种其他类型的引用:软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。它们在垃圾回收机制中的作用和区别如下:

  • 强引用

    • 只有所有 GC Roots 对象都不通过【强引用】引用该对象,该对象才能被垃圾回收。
    • 强引用Strong Reference:最为常见,比如new一个对象,这样的变量声明和定义就会产生对该对象的强引用。只要求强引用指向,并且 GC Roots 可达,那么 Java 内存回收时,即使濒临内存耗尽,也不会回收该对象。
  • 软引用(Soft Reference):

    • 软引用通过SoftReference类来实现,它的作用是使对象能够在内存不足时被垃圾回收器回收,但只有在内存真正不足时才会回收。当一个对象只被软引用指向时,垃圾回收器会尽量保留该对象,直到内存不足时才会回收它。软引用通常用于实现内存敏感的缓存,比如图片缓存等,使得缓存中的对象在内存不足时可以被回收,以避免OOM(OutOfMemoryError)异常的发生。
  • 弱引用(Weak Reference):

    • 弱引用通过WeakReference类来实现,它的作用是在垃圾回收时,只要对象只被弱引用所指向,不管内存是否充足,都会被回收。垃圾回收器对弱引用的对象进行垃圾回收的时候,会将这些对象标记为可回收的,然后在后续的垃圾回收周期内将它们回收掉。弱引用常用于解决内存泄漏问题,比如一些缓存或者监听器的场景,允许在没有强引用指向时自动释放资源。
  • 虚引用(Phantom Reference):

    • 虚引用通过PhantomReference类来实现,它的作用是在垃圾回收时提供了一种确保对象被回收的机制,但与软引用和弱引用不同,虚引用并不影响对象的生命周期。虚引用在被垃圾回收器回收时,会收到一个通知,可以通过这个通知进行一些后续操作,比如清理资源或者执行特定的逻辑。虚引用主要用于管理堆外内存,如使用java.nio.Buffer进行直接内存访问,需要手动释放的情况。

区别总结:

  • 强引用是默认的引用类型,只要有强引用指向一个对象,该对象就不会被垃圾回收。
  • 软引用会在内存不足时被垃圾回收,用于实现内存敏感的缓存。
  • 弱引用无论内存是否充足,在垃圾回收时都会被回收,常用于解决内存泄漏问题。
  • 虚引用在对象被回收时收到通知,可以进行后续操作,主要用于管理堆外内存。
  • 使用不同类型的引用可以帮助开发者更灵活地控制对象的生命周期,以及在某些场景下实现更高效的内存管理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值