• 强引用(StrongReference) 一般的赋值就是建立强引用,只要有强引用就不会被回收。
  • 软引用(Soft Reference) 在系统将要发生内存溢出时进行回收,如果回收后还是不够内存才跑出内存溢出异常。内存足够则不会回收。
  • 弱引用(Weak Reference) 只能存活到下一次GC时,不管内存是否足够。
  • 虚引用(Phantom Reference) 对对象的生存时间没影响,目的是为了在对象被回收时得到系统通知。

对于软引用、弱引用、虚引用 可以创建一个referenceQueue来跟踪对象是否被回收。

级别 回收时间 用途 生存时间
强引用 从来不会 对象的一般状态 JVM停止运行时终止
软引用 在内存不足时(fullgc) 缓存 内存不足时终止
弱引用 在垃圾回收时 缓存 gc运行后终止
虚引用 Unknown Unknown Unknown