zoukankan      html  css  js  c++  java
  • 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();

    }

  • 相关阅读:
    广义表的创建和遍历
    dev c++ Boost库的安装
    NAT模式
    vmware桥接模式
    smb与samba
    利用Linux的Samba服务模拟NT域
    使用samba进行共享文件操作步骤
    安装chrome
    使用虚拟机上网第二步
    TCP协议三次握手过程分析
  • 原文地址:https://www.cnblogs.com/dint/p/13897543.html
Copyright © 2011-2022 走看看