强引用自然不用多说
SoftReference 软引用
- 在堆内存不足时,会被GC回收掉
- 作用:做缓存用,一般存储大对象,当内存足够时,可直接获取缓存中对象,内存不足时回收掉,但是不如redis缓存好
WeakReference 弱引用
- 只要遭遇了GC就会回收
- 一般用在容器
ThreadLocal 中的Entry的key指向的是一个WeakReference弱引用,所以在GC是会被回收,但是Entry的value是强引用,所以在使用完ThreadLocal时要调用remove()方法。
ThreadLocal tl = new ThreadLocal<>();
tl.set(new M());
tl.remove();
PhantomReference 虚引用
- 跟踪对象的垃圾回收