ThreadLocal和内存使用情况

时间:2013-07-31 12:12:49

标签: java multithreading memory

创建ThreadLocal以具有以线程安全方式操作的对象的单独副本。

这意味着进程中的对象数量将随线程数量的增加而增加。 这是因为,每个线程都会创建自己的ThreadLocals副本。

  • 它是否不会增加进程的内存需求?

2 个答案:

答案 0 :(得分:2)

您似乎暗示ThreadLocal是特定的罪魁祸首会增加内存使用量,但实际上您的问题与ThreadLocal s 本身并不特别相关。在你描述的情况中,它们只是某些在某个时刻被分配的对象,并且当线程最迟死时将无法进行处理。

答案 1 :(得分:1)

java中的amount of memory进程取决于:

  • 物件
  • 线程
  • 原生数据结构
  • 原生代码

与每个项目关联的内存消耗因应用程序,运行时环境和平台而异。那么你如何计算总内存?好吧,获得准确的数字并不是那么容易,因为你对原生部分几乎无法控制。您可以真正控制的唯一部分是堆-Xmx的数量,类-XX消耗的内存:MaxPermSize和线程堆栈-Xss控制每个线程占用的内存量。调整堆栈大小时要小心,因为太小的大小会导致StackOverflow异常,并且您的应用程序将无法正常工作。所以公式是:

(-Xmx) + (-XX:MaxPermSize) + numberofthreads * (-Xss) + Other mem

很明显,进程占用的内存量会随着线程数量的增加而增加。 你的问题似乎不是关于ThreadLocals,而是关于一般的线程。