强引用 StrongReference
例子:// 强引用 String strongReference = new String("abc");
最普遍的引用,内存不够用报错GC也不会回收
软引用SoftReference
例子:
// 软引用 String str = new String("abc");
SoftReference<String> softReference = new SoftReference<String>(str);
内存不够用就会被回收
弱引用 WeakReference
只要遭遇到GC就会被回收,如果有个强引用指向他,强引用没了,就不用管了,gc会自动回收,一般用在容器。
典型应用ThreadLocal https://blog.csdn.net/u010191034/article/details/109224321
虚引用 PhantomReference
例子:
PhantomReference<M>phantomReference=newPhantomReference<>(newM(),QUEUE);
特点:
1 引用后获取不到,get不到
2 GC看到就灭掉 ,虚引用被回收 会有个队列专门队列收到通知,队列会收到一个值调用垃圾回收
3 给写虚拟机的人用,用于清理堆外内存,管理堆外内存