ThreadLocal内存泄漏的原理和成因是什么?

2026-06-10 15:40:06 752阅读 0评论 SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计303个文字,预计阅读时间需要2分钟。

ThreadLocal有两个问题:1. 每个变量的副本是存储在哪里的?2. 变量的副本是如何从共享变量中获取值的?源码中ThreadLocal的初始值是在何时设置的。ThreadLocal为每个线程维护一个变量的副本,确保线程间的变量互不影响。

ThreadLocal内存泄漏的原理和成因是什么?

ThreadLocal有两个问题:

1. 每个变量副本是存储在哪了?

ThreadLocal内存泄漏的原理和成因是什么?

2. 变量副本是怎样从共享的变量中赋值出来的?源码中threadlocal的初始值是什么时候设置的。

ThreadLocal为每个线程维护一个变量的副本?

每个线程的ThreadLocalMap都是线程自身持有的,但是初始化是在ThreadLocal中,然后每个线程相当于保存了一个map

这个map存的key是LocalThread的实例,value是存储的线程的局部变量

get方法

根据当前线程获取Thread中的值

set方法

根据当前线程获取当前线程的map,然后设置当前线程的值,

从而保证每个线程的值都是从自己的ThreadMap中获取

ThreadLocal为什么会引起内存泄漏

ThreadLocal的弱引用作为key,如果gc想要回收的时候,ThreadLcoal必然回收,Thread ref -> Thread ->ThreadLocalMap->Entry->value这个强引用一直就会存在,造成内存泄漏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

标签: 成因 原理 内存

本文共计303个文字,预计阅读时间需要2分钟。

ThreadLocal有两个问题:1. 每个变量的副本是存储在哪里的?2. 变量的副本是如何从共享变量中获取值的?源码中ThreadLocal的初始值是在何时设置的。ThreadLocal为每个线程维护一个变量的副本,确保线程间的变量互不影响。

ThreadLocal内存泄漏的原理和成因是什么?

ThreadLocal有两个问题:

1. 每个变量副本是存储在哪了?

ThreadLocal内存泄漏的原理和成因是什么?

2. 变量副本是怎样从共享的变量中赋值出来的?源码中threadlocal的初始值是什么时候设置的。

ThreadLocal为每个线程维护一个变量的副本?

每个线程的ThreadLocalMap都是线程自身持有的,但是初始化是在ThreadLocal中,然后每个线程相当于保存了一个map

这个map存的key是LocalThread的实例,value是存储的线程的局部变量

get方法

根据当前线程获取Thread中的值

set方法

根据当前线程获取当前线程的map,然后设置当前线程的值,

从而保证每个线程的值都是从自己的ThreadMap中获取

ThreadLocal为什么会引起内存泄漏

ThreadLocal的弱引用作为key,如果gc想要回收的时候,ThreadLcoal必然回收,Thread ref -> Thread ->ThreadLocalMap->Entry->value这个强引用一直就会存在,造成内存泄漏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

标签: 成因 原理 内存