强引用和弱引用
强引用和弱引用主要区别在于什么时候被垃圾回收,强引用就是我们最常使用的类型,在垃圾回收的时候,如果一个对象仅仅存在它的弱引用,那么它会被无情的回收掉。
Integer key = 666; // 强引用
WeakReference<Integer> value = new WeakReference<>(888); // 弱引用
// 另外,Integer内部IntegerCache保留了-128~127的强引用
System.gc();
// 此时key还是666 但是value = null
在上一节中的源码深入,我发现ThreadLocalMap的key是弱引用,但是value却是个强引用,当时没想明白就没写了,现在想明白了。
static class Entry extends WeakReference<ThreadLocal<?>> {
/** The value associated with this ThreadLocal. */
Object value;
Entry