在JDK1.2之前,Java只有两种引用:“已经引用”和“没有引用”
这样没有办法表述当内存空闲和紧张的时候的状态。
因此,JDK1.2之后扩展出了4种新的引用状态。
1、强引用
Object obj = new Object();
只要obj还指向Object,Object对象就不会回收,内存不足的时候,JVM会报错,而不是去回收。回收的方法是让obj = null。
2、软引用
软引用用来指代一些非必需,但是仍然有有用的对象。
当内存足够的时候,软引用对象不会被回收,当内存不足的时候,系统会回收软引用对象。
一般用于缓存技术,如图片缓存,网页缓存等。
3、弱引用
弱引用比软引用更弱,只要JVM进行垃圾回收,弱引用关联的对象都会被回收。
4、虚引用
一个对象如果有虚引用,那么就跟没有引用一样,随时可能被回收。无法通过虚引用来获取对象,虚引用必须要和ReferenceQueue引用队列一起用。