2010-03-10 75 views

回答

4

這取決於JVM的實現,並沒有在規範中指定。

Sun JVM將堅持它作爲第一步。一旦某個(可配置的)已分配內存的百分比未被使用,它就會將其中的一部分返回給操作系統(行爲受到MinHeapFreeRatio and MaxHeapFreeRatio settings的影響)。

+0

我從來沒有見過Java VM對於將內存返回系統非常積極 - 可能是默認情況下的一件好事。 Java進程往往是長時間運行的,並且不斷擴大和縮小可能會使內存碎片化。對於大多數服務器端解決方案來說,釋放內存會導致不確定的行爲和糟糕的性能,但是如果他們將這個決定留給用戶(使用-Xmx/-Xms設置)將會很好。 – 2016-11-14 20:08:00

1

回到過程第一,但也可以回到操作系統到底。由GC分配的內存位於一個大的連續塊(​​堆)或一組塊中,GC「釋放」只是釋放堆中的分配,但不一定返回到操作系統。一旦GC壓縮,VM可能會將某些內存返回給操作系統。

GC希望保留一定的空間,以便快速處理將來的「新」內存請求。因此GC儘可能少地向操作系統請求大內存中的內存。