ThreadLocal及Java引用类型
一、引用类型 1、强引用(Strong Reference) 一般用到最多的是强引用 2、软引用(Soft Reference) 如果一个对象没有强引用,只有软引用,当JVM发现内存不够时,垃圾回收器便会回收这些对象 3、弱引用(Weak Reference) 如果一个对象只有弱引用时,每次垃圾回收都会被回收 4、幻影引用(Phantom Reference) 如果一个对象仅持有幻影引用,那么它就和没有引用指向它一样,在任何时候该对象都可能被垃圾回收器回收。 幻影引用与软引用和弱引用的区别在于幻影引用必须和引用队列ReferenceQueue一起使用,幻影引用可以用来跟踪对象被回收的活动,因为当垃圾回收器准备回收一个对象的时候,如果发现它还有幻影引用,就会在回收之前,把这个幻影引用加入到与之关联的引用队列中去。 这样,程序通过判断引用队列中是否已经加入了幻影引用,来了解被引用对象是否将要被垃圾回收器回收,如果发现某个幻影引用已经被加入到引用队列,那么就可以在引用对象被回收之前采取必要的行动。 二、ThreadLocal 1、简介 ThreadLocal使用了弱引用,在一定程度上可以防止内存泄露。 2、ThreadLocal.ThreadLocalMap 此map使用的key是经过WeakReference包装的ThreadLocal对象