ThreadLocal内存泄漏需要注意的
? ? ? ?前段时间在网上看到了一篇关于ThreadLocal内存泄漏的文章 于是个人也研究了下ThreadLocal 对象,其原理是: ThreadLocal 定义的变量值 会存储在当前线程的一个map集合中 这个map里面存储的是Entity对象? , Entity对象的key是当前ThreadLocal对象的弱引用, value则是ThreadLocal变量的值 这就产生了一个问题: ? ? ? ? 如果ThreadLocal变量的强引用丢失了? map里面的弱引会失效? gc就回收ThreadLocal对象 那么 ThreadLocal的value 会在一直在map里面 直到Thread被回收? 却因为key释放了没有办法获得? ? 其实jdk针对此问题也做了一定范围的处理? ?就是key为null的entity会被覆盖或清除 ? 当然我们使用的时候也应该注意? 下面的几种用法都是有问题的: 1.同一个变量名多次new ThreadLocal? a=new ThreadLocal(); ..... a=new ThreadLocal(); ? 2.变量局部产生 public void func(){ ? ?ThreadLocal a=new ThreadLocal(); } 或 for(int i=0;i<100;i++){ ? ? ThreadLoal b=new ThreadLocal(); } ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |