JVM:引用强度
强引用
在程序代码中普遍存在,类似”Object obj=new Object()",只要强引用还在,垃圾收集器就永远不会回收掉被引用的对象,即使内存不足,抛出OutOfMemorryError错误
软引用
当一个对象具有软引用,类似于一个可有可无的生活用品。如果内存空间充足,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存
弱引用
一个对象具有弱引用,那就类似于可有可无的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器扫描它所管辖的内存区域的过程中,一旦发现了它只具有弱引用,那么不管当前内存空间是否足够,都会回收它的内存。
虚引用
形同虚设,不会决定对象的生命周期,如果一个对象仅有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收
虚引用主要作用是跟踪对象被垃圾回收的活动
虚引用与软引用和弱引用的一个区别在于:
虚引用必须和引用队列联合使用。当垃圾回收期回收一个对象的时候,如果发现它还有虚引用,那么在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列是否加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果发现虚引用已经加入到引用队列中,那么就可以在所引用的对象在被内存回收之前采取必要的行动。
注意:程序设计中较少使用虚引用和弱引用,软引用使用的较多,因为软引用可以加速JVM对垃圾内存的回收速度,可以维护系统的运行安全,防止内存溢出等问题