九江做网站的公司哪里好,网站图片批量上传,网站建设基础服务报价,网站代码图片一、ThreadLocal为什么会导致内存泄露
1.1、ThreadLocalMap的基本结构 ThreadLocalMap是ThreadLocal的内部类#xff0c;没有实现Map接口#xff0c;用独立的方式实现了Map的功能#xff0c;其内部的Entry也是独立实现的。源码如下#xff1a; 1.2、ThreadLocal引用示意图…一、ThreadLocal为什么会导致内存泄露
1.1、ThreadLocalMap的基本结构 ThreadLocalMap是ThreadLocal的内部类没有实现Map接口用独立的方式实现了Map的功能其内部的Entry也是独立实现的。源码如下 1.2、ThreadLocal引用示意图 1.3、原因 ThreadLocalMap使用ThreadLocal的弱引用作为key当ThreadLocal的变量引用被手动置位null的时候即一个ThreadLocal没有外部强引用来引用它当GC回收垃圾时ThreadLocal一定会被回收掉这样的话ThreadLocalMap中就出现了key为null的Entry这样的话线程就无法访问这个key为null的Entry中的value如果当前线程再迟迟不结束的话比如核心线程这些key为null的Entry的value就会一直存在一条强引用链即Thread refThread objThreadLocalMap objEntryvalueObject obj当大量的这种强引用链存在时就会导致内存溢出即内存泄露最终会导致内存溢出。 1.4、解决 程序员在编码过程中 注意使用ThreadLocal时要进行手动remove