强引用
Object a = new Object();
软引用
A-(强)>B-(软)>C
A能获取C的值
当heap内存不够时,会剔除软引用
作用:缓存
弱引用
A -(强)>B -(弱)>C
当A与B的强引用去掉后,弱引用会被回收
作用:ThreadLocal
ThreadLocal
threadLocal 中的entry是弱引用
static class Entry extends WeakReference<ThreadLocal<?>> {
/** The value associated with this ThreadLocal. */
Object value;
Entry(ThreadLocal<?> k, Object v) {
super(k);
value = v;
}
}
t1为null,threadLocal为弱引用,会回收;但是对应的value还是没有回收,会操作内存泄漏,当不用时,需要手动remove
虚引用
A-(强)>B-(虚)>C
A不能获取C的值
当A与B的引用不存在时,C引用会被丢到一个队列中
作用:堆外内存管理(通过队列对堆外内存回收,并去掉JVM中的相关引用)
Unsafe类可以操作堆外内存