-4

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

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

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

2 回答 2

2

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

于 2013-07-31T12:17:32.203 回答
1

java中进程占用的内存量取决于:

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

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

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

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

于 2013-07-31T12:25:31.207 回答