简介
1. Java中引用有四种类型:强引用、软引用、弱引用、虚引用(即:强软弱虚) 【在JDK1.2引入】
强引用
1. 程序中普遍存在的引用赋值,类似 Object object = new Object()这种引用的存在;
2. 垃圾回收器永远不会回收掉存在强引用的对象,这也是发送内存泄漏的主要原因之一;
软引用
回收原理
1 在系统要发生内存溢出前,会将软引用列入回收范围之中,若此回收完必要的垃圾后还会发生内存溢出,那么系统会在触发溢出异常之前开启第二次回收将这些软引用的回收,若是回收完弱引用还是没有足够的内存,系统才会抛出内存溢出异常;
简单说就是内存足够时,不回收,内存实在不足了才回收 软引用对象;
特点
软引用通常用来一些还有用,但非必要的对象,在高速缓存中就有用到软引用:如果有空闲内存,就可以暂时保存缓存,内存不够时再清除,这样可以更加充分的利用空间资源;
弱引用
垃圾收集器工作时,会将弱引用关联的对象回收(不管内存够不够用)
弱引用和软引用都可以在构造引用时指定一个队列引用,当其引用对象被回收时,就会加入指定引用队列,通过这个队列可以跟踪对象的回收情况;
虚引用
虚引用与对象是否被垃圾收集器回收没有关联,为对象设置虚引用唯一目的是可在这个对象被回收时收到一个系统通知;
虚引用必须和队列(ReferenceQueue)联合使用,通常用于在接到通知后安排进一步处理;