操作系統正在運行10個虛擬機JVM。事實上,大多數什麼都不做 - 只是不時地做一份工作。 每個進程分配600MB的系統內存。我知道實際上最多可以使用100 MB。每個這些進程剩餘的500 MB是由JVM(OldGen等)管理的內存。不幸的是,我的系統只有2GB的內存,因此大部分內存分配到了交換區。這意味着,當到達其中一臺機器的時候 - 第一個,swap會被讀到系統內存幾十秒。GC運行後是否可以使用Sun JVM將內存釋放到系統?
完成任務後,有什麼辦法強制JVM向操作系統釋放內存嗎?例如,GC每隔1-5分鐘運行一次,結果進程內存已經釋放到系統中。
我使用的是:Linux的x86_64的SMP,Java的熱點(TM)64位服務器VM 1.6.0
我認爲這是一個重複: http://stackoverflow.com/questions/324499/java-still-uses-system-memory-after-deallocation-of-objects-and-garbage-collecti – 2012-04-26 13:41:36
作爲精密:我從來沒有找到有關這個主題的具體規範,但我已經看到(在Linux上)由進程釋放的內存(但不是很多)。 – 2012-04-26 13:43:13
爲什麼你需要單獨的JVM來完成這些任務 - 爲什麼你不能僅僅使用一個短暫的任務被啓動到一個線程池(使用java.util.concurrent的ExecutorService構造)呢? – kittylyst 2012-04-27 03:03:43