ThreadLocal使用完成后为什么要及时remove?

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

大家都知道ThreadLocal是实现线程封闭的一种方式,其原理是以线程为键单独维护每一个线程的值,ThreadLocal在当前线程存的值,只能被这个线程所使用。
那么,问题来了,大家知道,线程就是用来执行方法的,正常情况下,如果方法执行完了,线程对象就会被回收,但是如果在ThreadLoca使用后,并没有调用remove方法来清除这个对象,而一直保持着引用关系,那么从GC Roots可达性分析的角度来看,这个线程对象一直可达,那么就不可能被标记为垃圾对象,也就不可能被回收了。而执行完方法后线程其实已经不再使用,而这种通过ThreadLocal引用的线程对象会一直堆积,就会造成内存泄露。
所以,为了避免内存泄露,Thread Local每次取值使用过后一定要调用remove方法及时清理。
ThreadLocal使用完成后为什么要及时remove?_第1张图片

你可能感兴趣的:(JVM,java,jvm,java)