2013-07-31 33 views
-3

ThreadLocal創建爲擁有單獨的對象副本以線程安全方式進行操作。ThreadLocal和內存使用

這意味着進程中的對象數量會隨着線程數的增加而增加。 這是因爲每個線程都會創建自己的ThreadLocals副本。

  • 它不會增加進程的內存需求嗎?
+1

當然可以。線程終止時,對象消失。 – tbodt

+1

...當然,更多的對象意味着更多的內存;這是不言而喻的。 –

+2

這個問題似乎是無關緊要的,因爲它只是要求確認證據。 –

回答

2

你似乎在暗示,這是ThreadLocal S的是增加內存使用一個特定的罪魁禍首,但實際上您的問題沒有特別涉及到ThreadLocal小號本身。在你描述的情況下,它們只是某些已經分配的對象,並且當線程最遲死亡時將不能被刷新。

1

amount of memory一個過程需要在Java取決於:

  • 對象
  • 線程
  • 本地數據
  • 本地代碼

內存消耗相關結構每個項目都是不同的應用程序,運行時環境和平臺。那麼你如何計算總內存?那麼,獲得準確的數字並不那麼容易,因爲你對本地部分幾乎沒有控制權。唯一可以控制的部分是堆-Xmx,類XX使用的內存量:MaxPermSize和線程堆棧-Xss,它控制每個線程所佔用的內存量。調整堆棧大小時要小心,因爲太小會導致StackOverflow異常,並且應用程序無法正常工作。因此,計算公式爲:

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

所以很明顯的存儲器中的過程需要將增加作爲線程的數目增加的量。 你的問題似乎並不是關於ThreadLocals,而是關於一般的線程。