【问题标题】:ThreadLocal and Memory usage [closed]ThreadLocal 和内存使用 [关闭]
【发布时间】:2013-07-31 23:03:26
【问题描述】:

ThreadLocal 被创建为拥有一个单独的对象副本,以便以线程安全的方式对其进行操作。

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

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

【问题讨论】:

  • 当然可以。当线程终止时,对象消失。
  • ...当然,更多的对象意味着更多的内存;这是不言而喻的。
  • 这个问题似乎是题外话,因为它只是要求确认证据。

标签: java multithreading memory


【解决方案1】:

您似乎暗示ThreadLocals 是增加内存使用的特定罪魁祸首,但实际上您的问题与ThreadLocals 并没有特别相关本身。在您描述的情况下,它们只是在某个时候分配的一些对象,并且最迟在线程死亡时将无法访问。

【讨论】:

    【解决方案2】:

    amount of memory一个进程在java中的依赖:

    • 对象
    • 线程
    • 本机数据结构
    • 本机代码

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

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

    很明显,一个进程占用的内存量会随着线程数量的增加而增加。 您的问题似乎与 ThreadLocals 无关,而与一般线程有关。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2013-07-31
      • 2011-08-11
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 2011-12-16
      • 1970-01-01
      相关资源
      最近更新 更多