原理以及内存泄露问题"/>
ThreadLocal原理以及内存泄露问题
1、ThreadLocal实现原理
1、每个线程中有一个ThreadLocalsMap,这是一个哈希表的结构里面有很多entry(也就是k-v),当我们使用ThreadLocal进行set值的时候,会将这个threadLocal设置为key,然后值设置为value放入ThreadLocalsMap,key为弱引用,value为强引用。
2、TheadLocal内存泄露问题
下面说一下ThreadLocal内存泄露的问题
前提:在栈中我们所有的实例都是堆中实际实例的引用
1、Entry只所以设置成弱引用,就是为了防止key也就是Threadlocal的引用丢失导致内存泄漏,设置成软引用就可以在GC时直接给回收掉。
2、当我们的ThreadLocal被回收掉后,那我们的Value还在内存中,如果是普通线程随着弹栈也就结束了没有问题,如果是线程池的话,这个Value就会一直堆积在内存中就导致了内存泄露。所以我们必须使用remove方法进行及时移除。
更多推荐
ThreadLocal原理以及内存泄露问题
发布评论