Java的四种引用类型

Java 的四种引用类型

强引用

任何时候声明一个对象使用=关联的引用,都是强引用,只要该强引用存在,就不会被垃圾回收器回收掉。当内存空间不足时,也不会随意清除任何一个强引用的对象。

软引用

软引用使用 SoftReference 进行声明,和强引用不同的是,如果堆内存空间不足时,会优先回收软引用。可以用于缓存数据。

1
2
SoftReference<String[]> softBean = 
new SoftReference<String[]>(new String[]{"a", "b", "c"});

弱引用

弱引用使用 WeakReference 进行声明,和软引用的区别是,只要发生垃圾回收,弱引用就一定会被回收掉。

1
2
WeakReference <String[]> weakBean = 
new WeakReference<String[]>(new String[]{"a", "b", "c"});

虚引用

虚引用使用 PhantomReference 进行声明,虚引用和其他引用不同,需要和一个ReferenceQueue一同绑定使用。如果再回收前,发现是虚引用,会现将虚引用放到ReferenceQueue中,执行完相关 hook 方法后,进行真正的回收。其目的是监测、跟踪垃圾回收器的行为。用于回收堆外内存。

  1. 当发现是虚引用,放到ReferenceQueue中。
  2. 另外一个线程,发现ReferenceQueue不为空,执行相关方法,清空堆外内存。
  3. 清空堆外内存后,对虚引用进行真正的回收。
-------------本文结束感谢您的阅读-------------