2012-05-15 54 views
6

我即將部署一個應用程序到現場服務器,現在我在我必須爲jvm設置堆和permgen大小的部分。我看過很多文章,他們都說「將最小堆大小設置爲(某個數)」,並將「最大堆大小設置爲(某個數)」,但這些文章都沒有說明爲什麼需要設置最小堆大小。我理解設置最大堆大小的原因,但不是最小值。如果你對此有所瞭解,我會很感激。我真的需要定義java最小堆大小

+0

那麼爲什麼你會設置一個下限呢?因爲你的程序可能需要一定的金額。我誤解了這個問題嗎?你的意思是說min設置實際上是必需的嗎? – keyser

+2

可能的重複[設置最小Java堆大小的原因是什麼?](http://stackoverflow.com/questions/8085949/whats-the-reason-to-set-a-minimal-java-heap-size) – assylias

回答

6

Java中的堆是一般的內存分配區域。讓我們假設我們將最小堆大小設置爲1000字節(這是一個荒謬的低數字)。現在讓我們說我在我的程序中實例化一個包含一些長度爲兩千個字符的文本的對象。如果不首先擴展我的堆大小,我無法保存此對象。現在,據推測我的最大堆參數足夠大,以允許這 - 但這是設置最大堆大小的原因。

但是,假設我的服務器有4G內存,並且我設置了最小堆大小。 (一個荒謬的數字。)如果沒有其他程序佔用任何內存,這將工作。但是,如果我用我的java程序啓動第二個進程,它將無法分配足夠的內存並退出。

最小尺寸爲你做兩件事;首先,它使內存可以快速啓動以實現快速啓動。其次,它可以讓你調整你的jvm,讓你有一些不變量,讓你預測你可以運行多少個進程。如果您的最小堆大小過大,那麼您可能會浪費內存,從而永遠不需要那麼多,從而限制了系統的容量。如果將其設置得太小,程序啓動需要很長時間,對進程的性能產生負面影響。

1

設置最小堆大小允許Java預先分配一些內存,從而縮短啓動時間。

1

顯式設置最小大小(高於默認值)有助於在操作系統級別分配碎片並啓動時間性能。

Java堆由OS分配的內存支持,初始塊越大,將發生的重新分配和碎片越少。

設置最小值等於或幾乎等於最大值,將完全消除這些情況。