Java 四种引用类型(强、弱、软、虚)

以下是深海个人的理解,如有高见欢迎评论区指正,感谢

强引用

最常见引用类型,就算虚拟机炸裂,GC也不会去动的引用类型.

软引用

可有可无的引用,只有在内存不足的情况下,GC才会回收它,平时就算GC路过,也不予理会

软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中

弱引用

无论内存是否充足,只要GC路过,赶尽杀绝.

弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。

虚引用

虚引用,又称为"幽灵引用".它并不影响对象的生命周期.

在java中用java.lang.ref.PhantomReference类表示:

如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收.

虚引用必须和引用队列(ReferenceQueue)联合使用.

// 虚引用一般用来跟踪一个对象是否被回收       
MyObject obj = new MyObject();
       ReferenceQueue referenceQueue = new ReferenceQueue<>();
       PhantomReference sf = new PhantomReference<>(obj,referenceQueue); 
       obj = null;
       System.out.println("是否被回收"+sf.get());
       System.gc();
       System.out.println("是否被回收"+sf.get());

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在垃圾回收后,销毁这个对象,将这个虚引用加入引用队列.程序可以通过判断引用队列中是否已经加入了虚引用 ,来了解被引用的对象是否将要被垃圾回收.如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动.

发布了54 篇原创文章 · 获赞 212 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/93979674