2010-03-28 130 views

回答

31

好處是,當您使用足夠大的堆以使其必須調整大小時,會有性能損失。如果你將它初始設置爲64MB,但你的負載應用程序需要250MB,當你點擊64MB附近時,JVM將分配更多的堆空間並可能移動某些對象並做其他記錄。這當然需要時間。

當您的應用程序處於加載狀態時,您希望所有資源專用於使其運行,因此這種額外的工作可能會使應用程序的響應速度變慢,甚至在某些情況下,如果在堆之前內存不足被調整大小。

有時,在使用Java應用程序時,您會看到諸如「將XmsXmx設置爲相同值」的說明。這樣做的目的是爲了避免調整大小,以便您的應用程序啓動時堆的大小已經儘可能大。

+0

根據您的經驗,建議您將Xms設置爲與Xmx相同的值? – SyBer 2010-03-28 09:10:19

+7

這取決於應用程序。如果您是一家爲應用程序或一組應用程序提供專用服務器的金融機構,這很有道理。特別是因爲處理市場訂單的應用程序可能會處理100或1000條消息/秒,平均延遲爲2-25毫秒。對於當時發送的所有訂單而言,調整大小可能會使等待時間縮短5000%。你甚至可以下訂單。 儘管如此,在您嘗試優化之前,配置文件。 – Phil 2010-03-28 09:21:19

+0

應該注意的是,對於具有大量活動JVM的系統-Xms將增加平均JVM佔用空間,而允許JVM自行管理其堆擴展允許使用內存佔用空間收集方案。 – Xailor 2010-04-21 23:57:12

6

鏈接的文章解釋得很清楚:

默認值:-Xms 3670k -Xmx64米 [...] 大 服務器應用程序經常經歷 兩個問題,這些默認值。其中一個 的啓動速度很慢,因爲初始的 堆很小,必須調整大小,超過 的很多主要集合。更多 緊迫的問題是,對於大多數服務器應用程序來說,默認的 最大堆大小是不合理的 小。 拇指服務器 應用規則是:

  1. 除非你有 暫停的問題,嘗試將虛擬機給予儘可能多的內存 越好。 默認大小(64MB)往往太小 。
  2. 設置-Xms和-Xmx到 相同的值通過從虛擬 機器中刪除最重要的尺寸決定來增加可預測性 。但是,如果您做出不好的選擇,虛擬 機器將無法補償 。
  3. 一般來說,增加內存時會增加處理器的數量, 因爲可以並行分配 。

您還可能對this discussion感興趣。

3

如果您的應用程序需要超過64 MB的堆內存是正常的,將Xms設置爲更大的值應該會提高應用程序的性能,因爲VM不需要多次請求額外的內存。

在生產系統中,我考慮將Xms和Xmx設置爲相同的值。它基本上是這樣說的:「這是虛擬機可以獲得的堆內存量,並且我馬上將它投入使用」。

3

什麼是設置-Xms參數,以及具有該初始存儲器例如更大的利益,那麼默認計算的一個

如果初始堆小,並且必須被調整過許多重大收藏,創業將會變得緩慢。

此外,是否有任何好處來設置初始和最大的記憶到相同的大小?

將設置-Xms-Xmx設置爲相同的值會給您帶來可預測性。在性能調整期間調整JVM的大小時,這一點尤爲重要。但是JVM將無法彌補任何不好的決定。

我傾向於爲生產服務器(在性能測試期間調整)使用相同的值。

+0

你能提供你的想法stackoverflow.com/questions/39652282/...和stackoverflow.com/questions/39652282/...?提前致謝 – emilly 2016-09-23 05:42:10