1.NormalReference ,正常的引用就是强引用,一个对象只要有强引用指向它,就一定不会被GC回收,内存不足会OOM。
2.SorfReference,软引用指向的对象,正常GC不会回收,只有内存不够时启动的GC(FULL GC)才会回收软引用对象。用途:缓存。
3.WeakReference ,只要GC遇到被只被弱引用指向的对象,就会回收这个对象。用途:容器,防止内存泄漏。如WeakHashMap,ThreadLocal.threadLocalMap等。
4.PhantomReference,虚引用不管有没有指向对象,都无法获得它指向的对象,get()返回的结果都是null。当GC遇到它时,就会把它用放入队列里(构造方法的第二个参数),我们监测队列长度的变换可以知道虚引用的回收情况,然后进行特定操作。用途:管理堆外内存(不被jvm管理的内存),如:NIO中的DirectByteBuffer(直接内存),指向的就是jvm外的系统内存,GC无法回收堆外内存。所以可以使用虚引用,监测虚引用回收队列,清理堆外内存---使用Unsave类或者c++本地代码。