强引用
不会被垃圾回收
Object o = new Object()
软引用
用于缓存
在堆内存空间不足的时候 会被垃圾回收
SoftReference<byte[]> softReference = new SoftReference<byte[]>(new byte[1024*1024]);
弱引用
垃圾回收的时候会直接回收弱引用
WeakReference<Integer> m = new WeakReference<>(10);
虚引用
管理堆外内存
和没有是一样的,get 也get不到,垃圾回收的时候会随时回收,用于管理堆外内存。
DirectByteBuffer
在使用 直接内存(堆外内存)的时候可以给他挂一个虚引用,当虚引用被回收的时候,会放到队列中,通过队列找到并清理堆外内存
PhantomReference<Integer> p = new PhantomReference<>(10,new ReferenceQueue<>());