JVM之垃圾回收相关概念之引用

JVM之垃圾回收相关概念之引用


前言

  • 带着问题去阅读,==强引用、软引用、弱引用、虚引用有什么区别?具体使用场景 是什么?

1.强引用

  • 强引用(StrongReference)

最传统的引用定义,程序代码中普遍存在引用赋值,类似“Object A= new Object()”这种引用关系

  • 无论任何情况下,只要强引用关系还存在,是可触及的,被引用的对象就永远不会被垃圾回收器回收掉。
  • 普通系统99%以上都是强引用。
  • 强引用是造成java内存泄漏的主要原因之一
    强引用的内存结构
  • 强引用可以直接访问目标对象。

2.软引用

  • 软引用(SoftReference)
  • 系统将要发生溢出才会对其进行回收,如果这次回收之后内存还是不足就会OOMError。
  • 应用场景:通常来实现内敏感的缓存。比如:高速缓存,mybatis缓存
  • 如果有内存,就暂时保留缓存,内存不足及时清理,这样就保证了有缓存的同时,不会耗尽内存。
  • 垃圾回收器在某一时刻决定回收软壳大的对象的时候,会清理软引用,并可选的把引用存放到一个引用队列(Reference Queue)。
    软引用实例

3.弱引用

  • 弱引用(WeakReference)
  • 被弱引用关联的对象只能存活到下一垃圾收集之前,当垃圾回收器收集工作时,无论内存是否够用,都会回收掉弱引用关联的对象。
  • 垃圾回收气的线程通常优先级很低,如果不及时发现持有弱引用的对象,这种情况,弱引用对象就能存在较长时间。
  • 同样可以指定一个引用队列
  • 软引用和弱引用非常适合来保存那些可有可无的缓存数据
    弱引用实例

4.虚引用

  • 虚引用(PhantomReference)
  • 一个对象是否有虚引用的存在,完全不会都对其生存时间造成影响,也无法通过一个虚引用获得一个对象实力。
  • 为对象设置虚引用关联的唯一目的,就是能在对象被垃圾回收器回收时收到一个系统通知(不想finalize,是对象自己的方法)。
  • 虚引用必须和引用队列一起使用。
    虚引用实例

总结

强软弱虚,引用强度依次递减。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值