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