Skip to the content.

Java四种引用包括强引用,软引用,弱引用,虚引用。

1. StrongReference — 强引用

StrongReference 是 Java的默认引用实现, 它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收;
Object object = new Object();
上面的对象就是拥有强引用。
想要gc回收这个对象,就需要显式的将object = null ,那么对象就不存在引用关系

2.SoftReference — 软引用

软引用的强度是仅次于强引用的,如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,
就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。
软引用可用来实现内存敏感的高速缓存。   
在jvm内存不够的时候就会回收拥有软引用的对象,在jvm内存充足的时候不会回收

我们可以使用java.lang.ref.SoftReference来创建软引用;

String str=new String("abcd");                                     // 强引用  
SoftReference<String> softRef=new SoftReference<String>(str);     // 软引用  

当内存不足时,等价于: If(JVM.内存不足()) {
str = null; // 转换为软引用
System.gc(); // 垃圾回收器进行回收
}

3. WeakReference — 弱引用

WeakReference 是一个弱引用, 当所引用的对象在 JVM 内不再有强引用时, GC 后 weak reference 将会被自动回
回收时机:在垃圾回收的时候;使用:同软引用; 生命周期:GC后终止

4.PhatomReference — 虚引用

一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来获取一个对象的实例。
为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。

Star 我的GitHub

# Back