引用描述
JAVA中处处存在引用,这直接影响到JAVA的垃圾回收机制的定义和实现,在JAVA中,主要存在四种引用方式,强引用、软引用、弱引用以及虚引用,下面进行介绍。
强引用
强引用的理解非常简单,在程序代码中普遍存在,如:
Person p = new Person();
其中变量p就是一个引用变量,指向Person()实例,这一类的引用,只要强引用还存在,JVM的垃圾回收器就不会回收掉被引用的对象。在实际的编程中,可以进行复制NULL操作进行可回收设置,但真正的回收时机还取决与JVM的回收机制。
软引用
软引用的引用强度弱于强引用,主要用来引用或者描述一些还有用但是不是必须的对象,如:一些图片或者数据的缓存,采用软引用。JVM的垃圾回收器会在内存不足OOM的情况出现之前进行GC操作,避免OOM,但是在内存充足的情况下,这类对象不会被回收。
弱引用
弱引用的引用强度弱于软引用,主要用来引用的一些不是必须的对象(这种对象可能没有用了,但可能有用),如:一些缓存的数据等。这一类引用的对象会在每一次JVM垃圾回收的时候被回收,不管该对象是否有用,最终都会被GC掉。
虚引用
虚引用的引用强度弱于弱引用,是最弱的引用,也被称为幽灵引用或者幻影引用。从表象上看,虚引用并不会对所引用的对象造成任何的影响,它存在的最主要的目的之一就是所引用的对象在被垃圾回收器回收的时候收到一个系统的通知。