创建 ThreadLocal 是为了拥有一个单独的对象副本,以便以线程安全的方式对其进行操作。
这意味着进程中的对象数量将随着线程数量的增加而增加。这是因为,每个线程都会创建自己的 ThreadLocals 副本。
- 它不会增加进程的内存需求吗?
创建 ThreadLocal 是为了拥有一个单独的对象副本,以便以线程安全的方式对其进行操作。
这意味着进程中的对象数量将随着线程数量的增加而增加。这是因为,每个线程都会创建自己的 ThreadLocals 副本。
您似乎暗示ThreadLocal
s 是增加内存使用量的特定罪魁祸首,但实际上您的问题与ThreadLocal
s本身并没有特别相关。在您描述的情况下,它们只是在某个时候分配的一些对象,并且最迟在线程死亡时将无法访问。
java中进程占用的内存量取决于:
与每个项目相关的内存消耗因应用程序、运行时环境和平台而异。那么如何计算总内存呢?好吧,获得准确的数字并不是那么容易,因为您几乎无法控制原生部分。您可以真正控制的唯一部分是堆 -Xmx 的数量,类 -XX:MaxPermSize 和线程堆栈消耗的内存 -Xss 控制每个线程占用的内存量。调整堆栈大小时要小心,因为太小会导致 StackOverflow 异常,您的应用程序将无法正常工作。所以公式是:
(-Xmx) + (-XX:MaxPermSize) + numberofthreads * (-Xss) + Other mem
很明显,一个进程占用的内存量会随着线程数量的增加而增加。您的问题似乎与 ThreadLocals 无关,而与一般线程有关。