2014-01-21 125 views
-2

我使用的tomcat servlet同時存儲內容,因爲它可用於servlet。單個請求可能需要存儲1個或數千個(組件)。java管理多線程內存

爲了處理併發性,我使用了一個固定大小的線程指針表。當一個組件可以被存儲 - 存儲對象被分配給表中的一個槽並開始執行。當線程完成時,該插槽爲空,並根據需要分配另一個存儲對象。如果使用表中的所有插槽,則會定期檢查表中已完成的線程,並更換線程。

使用此模型管理內存可能很困難,因爲垃圾收集永遠不會完全清除踩死時使用的內存。這可能導致內存溢出或內存恢復過小。

有沒有辦法處理這種類型的GC - 例如,需要同步,然後是GC?是否有一個Java併發處理程序匹配這種類型的處理...

任何意見,將不勝感激。

感謝

+3

我沒有得到你爲什麼必須完成處理單個請求後殺死線程。使用固定線程池,應用生產者/消費者模式,並重新使用線程。 – khachik

+2

「垃圾收集永遠不會完全清理踩死時使用的內存。」你到底在說什麼? – Kayaman

回答

0

我原本以爲是GC的問題沒有完全清理內存的是,我只看到輕微的GC收集僅做了部分清理。當主要收集發生時,它會凍結我們的服務長達10分鐘。

在對不同的收集器進行了一些試驗之後,它看起來像版本7下的新的G1收集器,可以做到這一點。

感謝那些研究過這些的人。