当前位置: 首页 > wzjs >正文

彭州建设局网站河北省住房建设厅网站

彭州建设局网站,河北省住房建设厅网站,企顺网网站建设,青岛做企业网站的公司原理参考: ThreadLocal原理以及用法详解-CSDN博客 ThreadLocal使用完都建议调用remove()清除上下文,特别是在线程池的场景。如果不这样做,可能会造成内存泄露。 我们来一步一步分析下是如何造成的。 一,ThreadLocal在内存里怎么存…
原理参考: ThreadLocal原理以及用法详解-CSDN博客
ThreadLocal使用完都建议调用remove()清除上下文,特别是在线程池的场景。如果不这样做,可能会造成内存泄露。
我们来一步一步分析下是如何造成的。 

一,ThreadLocal在内存里怎么存的?


首先,Thread、ThreadLocal、目标对象在JVM中是这样存储的:
这里的Map其实不是常规的K/V存储的Map,具体在代码里如下图:
所以Key其实就是referent属性,该属性定义在WeakReference的父类里:

二,理解弱引用


当对象仅被弱引用引用时,垃圾回收器会在 下一次回收周期中回收该对象,无论当前内存是否充足。
Object obj = new Object();
WeakReference<Object> weakRef = new WeakReference<>(obj);
// 还有强引用,目标对象(obj指向的对象)不会回收
System.gc();
System.out.println(weakRef.get());  // 不为null// 断开强引用
obj = null; 
System.gc();
// 目标对象将被回收
System.out.println(weakRef.get());  // null

特别注意的是,这里涉及2个对象:
  • 目标对象的回收由弱引用机制保证。
  • WeakReference对象本身 的回收由普通 GC 规则决定,即如果还有它的强引用(如全局变量、集合),这个对象不会回收。

三,内存泄露如何发生?


内存泄露前提:不执行threadLocal.remove(),线程也不回收(如线程池核心线程)。
上图是典型内存泄露场景。
解释下,ThreadLocal没有强引用,所以只会在执行set(obj)之后,被当做 弱引用目标包装在ThreadLocalMap的Entry中。
手动执行GC后,ThreadLocal就被回收了,referent也就是null了。但value仍然以强引用引用着MyObject,也就不会释放和回收了。
内存泄漏的积累:
如果线程执行多次任务,创建了多个局部变量ThreadLocal且未清理,ThreadLocalMap 中可能会积累大量key=null的无效Entry,最终导致严重的内存泄露。
虽然ThreadLocalMap在调用get、set、remove时会扫描并移除key=null的Entry,但如果长期不调用这些方法,无效Entry还是会持续堆积。
所以建议ThreadLocal被定义成常量:
private static final ThreadLocal<Object> threadLocal = new ThreadLocal<>();
但这个并不影响内存泄露的发生,即threadLocal是否被弱引用回收不是决定是否内存泄漏。

四,内存泄露如何避免?


始终调用 remove(),且尽量避免存储大对象。
try {
    threadLocal.set(data);
    // 执行业务逻辑...
} finally {
    threadLocal.remove(); 
}

文章转载自:

http://Wh7f39vA.rbxsk.cn
http://BGEegF6n.rbxsk.cn
http://hXOPDTVm.rbxsk.cn
http://zbbDLMOQ.rbxsk.cn
http://bT6BVGPr.rbxsk.cn
http://7LO11rEU.rbxsk.cn
http://0qup89Nt.rbxsk.cn
http://of9Dc1Bt.rbxsk.cn
http://DtH0AAE8.rbxsk.cn
http://MxFQZVi8.rbxsk.cn
http://x6qsJ3zo.rbxsk.cn
http://sBLnap5s.rbxsk.cn
http://M8TdoLsS.rbxsk.cn
http://rgoEooQH.rbxsk.cn
http://I7vNk0Og.rbxsk.cn
http://WbRCCxdi.rbxsk.cn
http://WGQSziJ1.rbxsk.cn
http://g8nPiBqV.rbxsk.cn
http://RimtQKuy.rbxsk.cn
http://49KpFViU.rbxsk.cn
http://OLeaohNV.rbxsk.cn
http://nFdYXNf6.rbxsk.cn
http://6Aq0NJwW.rbxsk.cn
http://lB96SFWB.rbxsk.cn
http://CbLRFcjd.rbxsk.cn
http://PptUIzN0.rbxsk.cn
http://yUN5PvjI.rbxsk.cn
http://92GiIp8N.rbxsk.cn
http://7subBnSd.rbxsk.cn
http://auqzTkvI.rbxsk.cn
http://www.dtcms.com/wzjs/765604.html

相关文章:

  • 国外怎么做直播网站网站如何申请微信支付
  • 门户网站建设方案中信息公开专业的河南网站建设公司排名
  • 广州网站建设与网页设计建设银行网银显示网站丢失
  • 广东加盟网站建设3liang 设计网站 源码
  • 官方网站建设公司免费下载网页模板
  • 网站飘窗建设合同电子商务网站建设的核心硬件
  • 创建个人网站的流程制作表格的步骤
  • 哪里有微信网站建设jquery 单击input输入框弹出选择框多用于人才类网站
  • 威海精神文明建设办公室网站实惠福步外贸论坛
  • 预约网站模板大青海网app
  • 招代理的网站要怎么做的夸克浏览器网页版
  • 零售网站模板微信公众号登录入口在哪里
  • 做网站能赚钱吗知乎贵州省建设厅审图网站
  • 佛山网站建设企业seo网络推广什么意思
  • 阿克苏市建设局网站免费推广网站大全
  • 做软件贵还是做网站贵做企业网站合同
  • 广州建信网络有限公司长春关键词优化
  • 大图做网站背景加载慢网络推广营销公司
  • 成都私人网站建设网站服务器和空间有什么区别
  • 网站托管外包网站开发广告宣传语
  • 钢铁网站建设怎么说服企业做网站
  • 一个企业做网站的目的杨浦专业网站建设
  • 如何查询网站的注册信息查询怎么一键打开两个wordpress
  • 网站导航栏怎么做网站开发与设计实训
  • 如何做旅游休闲网站软件开发教程自学教程
  • 专业做装修设计的网站网站空间模板
  • 网站建设月薪带引导页的网站
  • 做家常菜的网站哪个好wordpress文章能发链接吗
  • 上海网站制作商网站建设学校培训班
  • 温州建设网站网上商城小程序源码