【JVM虚拟机篇13】引用【强、软、弱、虚】

30 阅读1分钟

引用【强、软、弱、虚】

强引用

只有所有GC Roots对象都不通过【强引用】引用该对象,该对象才能被垃圾回收

image.png

软引用

仅有软引用引用对象,在垃圾回收后,内存仍不足时会触发垃圾回收

image.png

弱引用

弱引用:仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用

image.png

虚引用

必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由Reference Handler 线程调用虚引用相关方法释放直接内存

image.png

引用【强、软、弱、虚】的区别

  • 强引用:只要所有GC Roots 能找到,就不会被回收
  • 软引用:需要配合SoftReference使用,当垃圾多次回收,内存依然不够的时候会回收软引用对象
  • 弱引用:需要配合WeakReference使用,只要进行了垃圾回收,就会把弱引用对象回收
  • 虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由Reference Handler线程调用虚引用相关方法释放直接内存