考慮基本fixed
線程池:執行程序創建的線程池是否釋放內存?
Executors.newFixedThreadPool(MaxListeners)
我打算不斷提出新的任務 - 在響應傳入TCP套接字服務請求。
但是,當每個任務的Runnable
代碼完成時 - 他們消耗的內存是而不是發佈?我看到不斷增長的jvm內存使用情況。
該應用程序傾向於按組處理一組任務。我們可以看到樓梯內存使用模式:在每一組任務之後,內存都是幾十兆字節。等待幾十分鐘(到幾個小時)不會導致內存被回收。
所以兩個問題:
- 是否有回收
Executors
線程池的存儲器的手段不關閉池下 - 如果不是,那麼如何才能長期運行的線程池使用現有的
java.util[.concurrent]
包進行設計?
問題可能與您的應用程序的實施方式有關。你沒有嘗試堆快照並分析它(使用JProfiler或YourKit)嗎? – hunter
一旦執行完成,Runnables應該完全符合GC的條件。 (如果Runnable使用任何ThreadLocal存儲,這是一個不同的故事。)儘管如此,GC很可能不會立即收集Runnable。 –
@hunter我花了很多時間與''jvisualvm'等jstat' – javadba