2015-04-21 21 views
0

我在Windows和5GB內存空間中安裝了6GB內存,並且在運行指定Java堆空間-Xmx2048m的Java程序時工作正常。我的問題是,如果我有這個在我的Linux機器使用Windows 7或Linux的Java內存

執行cat/proc/meminfo中

MemTotal: 10.130464 kB (10.1gb) 
MemFree : 248.736 kB (248mb) 

,如果我這個運行內存與-Xmx2048m Java程序在Linux中會發生什麼?

+2

你試過了嗎? –

+0

它很可能運行良好,除非你有真正的資源限制。操作系統將進行內存管理,包括必要時使用交換空間 – vsnyc

+0

我沒有嘗試過。它可能會損壞linux內存或者會發生什麼我很害怕。 – tuturyokgaming

回答

1

Java將允許堆增長到Xmx值,但它不一定會啓動或需要使用那麼多。 Xms指定了最小堆大小,即Java在開始時將分配多少堆內存。 Java將爲Perm Gen分配額外的內存。如果沒有可用的內存需要更多內存,任何程序(不僅僅是Java)都將開始失敗。當達到Xmx或者機器上沒有可用內存時,Java尤其會拋出OutOfMemoryError。
MemFree是剩餘的物理內存量,但這不是可用內存的總量。當物理內存已滿時,操作系統將使用交換空間(SwapTotal和SwapFree)。交換空間通常在硬盤上,因此非常慢。 Linux會嘗試將最常用的內存塊保留在物理內存中以保持性能,但通常會有一些放緩。考慮到剩餘的自由物理空間相對較少,Linux機器可能已經在使用一些交換空間。結合MemFree和SwapFree來獲得您的總可用內存。
編輯:1.8GB總物理加上免費交換,您將能夠啓動Java,因爲它最初使用Xms(最小堆)加上PermGen內存,在10GB物理內存上默認爲220MB(1/64物理內存加上64MB PermGen的)。當你的程序運行時,它可以使用剩餘的可用系統內存,但只有當你的程序實際需要時纔可以使用。如果這個程序不是資源密集型的,它可能會停留在低端。通常你應該設置Xmx,以便它不會使用你所有的內存。如果您的內存使用率很高,您可能只想關閉一些其他程序。

+0

我有277716 kB(277mb)用於MemFree和SwapFree 1397572(1.4GB)因此,假設我有1.8GB,因此我無法執行-Xmx2048m?即使我安裝了Ram 10gb – tuturyokgaming