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

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


文章目录

  • JVM之垃圾回收相关概念之引用
    • @[TOC](文章目录)
  • 前言
  • 1.强引用
  • 2.软引用
  • 3.弱引用
  • 4.虚引用
  • 总结

前言

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

1.强引用

  • 强引用(StrongReference)

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

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

2.软引用

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

3.弱引用

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

4.虚引用

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

总结

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

你可能感兴趣的:(JVM,其他,java)