四种引用类型
Java 中对象的引用分为四种级别,这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。
基础知识
强引用:普通使用的引用
强引用是造成 Java 内存泄漏的主要原因之一
软引用:
GC内存不够时回收
适用于:当缓存使用
弱引用⭐(面试问的最多):遇到GC就会回收
弱引用 -> ThreadLocal
弱引用:解决某些地方的内存泄露问题
虚引用:直接回收,和没有一样
虚引用的作用:当某个对象被回收时,会发一个通知,知道这个对象被回收了
软引用/弱引用通过 get() 方法可以拿到这个引用的值,但虚引用拿不到这个值
queue 监测:有没有虚引用被回收,并通知
用途:管理堆外内存
JVM:只能通过 gc 管理自己的内存,不能管理不属于自己的内存
虚引用指向 DirectByteBuffer 时,任何一个对象被回收时,通过监测 Queue 里面有没有对象,知道该对象被清理后要不要清理堆外内存。仍然是 JVM 通过 gc 清理堆外内存。
Threadlocal
threadlocal 结合线程池可以做很多很多东西
threadlocals 可能是从线程池里面拿取的,因此最好养成好习惯,用完 threadlocals 就把它 remove 掉
threadlocal 中的 entry 是一个弱引用