Java提供了四种不同的引用类型:强引用、软引用、弱引用、虚引用,这四种引用类都在java.lang.ref包下。
强引用:
如果一个对象具有强引用,即使抛出OOM异常,垃圾回收器也不会回收它,平常使用的A a = new A()就是强引用。
软引用:
如果一个对象具有软引用,除非内存空间不足,否则垃圾回收器不会回收它。只有在内存空间不足时,才会回收,避免OOM异常。
弱引用:
如果一个对象具有弱引用,只要被垃圾回收器扫描到,无论内存是否足够都会被回收。
虚引用:
如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。