ThreadLocal是多线程中,共享变量的副本。
ThreadLocal tl= new ThreadLocal();
tl.set();
set函数内部首先获得ThreadLocalMap,map.put(this,obj);
可以看到ThreadLocal被引用了两次,tl=null,tl也不会被回收掉,会造成内存泄漏。所以map.put使用的是软引用,相当于weak_ptr并不会引用计数加加。
但还是存在内存泄露,因为向map里面放obj,obj引用计数也会加加,obj无法被回收。因此在tl=null之前,一定要先tl.remove();
TreadLocal与弱引用和内存泄漏
最新推荐文章于 2024-07-27 13:31:57 发布