https://www.jianshu.com/p/9a49ed06e936
起因
网上一系列的文章都在分析ThreadLocal,说如果线程不销毁的话,value会一直存在于内存中,所以必须调用remove,下面通过一些实践和源码来分析一下这个观点是否在所有情况下都适用
案例分析
第一个实验
demo图
可以看到上面这张图片,在使用线程池时,由于线程被复用没有销毁,在没有调用remove的情况下会读取到上一次的状态,所以这也就告诉我们在线程不销毁的情况下,值不会被回收。
第二个实验
首先设置了-Xms100m -Xmx100m,然后使用了如下的代码
public class ThreadlocalApplication {
public static ThreadLocal<byte[]> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
SpringAppli