ThreadLocal創建爲擁有單獨的對象副本以線程安全方式進行操作。ThreadLocal和內存使用
這意味着進程中的對象數量會隨着線程數的增加而增加。 這是因爲每個線程都會創建自己的ThreadLocals副本。
- 它不會增加進程的內存需求嗎?
ThreadLocal創建爲擁有單獨的對象副本以線程安全方式進行操作。ThreadLocal和內存使用
這意味着進程中的對象數量會隨着線程數的增加而增加。 這是因爲每個線程都會創建自己的ThreadLocals副本。
你似乎在暗示,這是ThreadLocal
S的是增加內存使用一個特定的罪魁禍首,但實際上您的問題沒有特別涉及到ThreadLocal
小號本身。在你描述的情況下,它們只是某些已經分配的對象,並且當線程最遲死亡時將不能被刷新。
的amount of memory一個過程需要在Java取決於:
內存消耗相關結構每個項目都是不同的應用程序,運行時環境和平臺。那麼你如何計算總內存?那麼,獲得準確的數字並不那麼容易,因爲你對本地部分幾乎沒有控制權。唯一可以控制的部分是堆-Xmx,類XX使用的內存量:MaxPermSize和線程堆棧-Xss,它控制每個線程所佔用的內存量。調整堆棧大小時要小心,因爲太小會導致StackOverflow異常,並且應用程序無法正常工作。因此,計算公式爲:
(-Xmx) + (-XX:MaxPermSize) + numberofthreads * (-Xss) + Other mem
所以很明顯的存儲器中的過程需要將增加作爲線程的數目增加的量。 你的問題似乎並不是關於ThreadLocals,而是關於一般的線程。
當然可以。線程終止時,對象消失。 – tbodt
...當然,更多的對象意味着更多的內存;這是不言而喻的。 –
這個問題似乎是無關緊要的,因爲它只是要求確認證據。 –