2011-11-03 55 views
2

我有兩個Java程序。在我的電腦上,其中一個使用9MB的RAM,另一個使用77MB。但是當我將它們上傳到服務器時,相同的程序使用382MB和186MB!有沒有辦法阻止這種情況發生?爲什麼Java在我的Linux服務器上使用更多內存?

+3

你說的是物理內存還是虛擬內存?如果虛擬內存 - 誰在乎?虛擬內存不是稀缺資源。 –

+1

您是否嘗試了內存轉儲?你可以使用 - http://java.sun.com/developer/technicalArticles/Programming/HPROF.html – Pushkar

+3

看到你的內存利用率你確定它只用了9MB的總量,我覺得很難相信嗎?在具有更多內存的機器上,最大內存會增加。這意味着使用更多的虛擬內存,但不是更多的常駐內存。 (這是你應該看的數字) –

回答

3
  1. 如何衡量每種情況下的內存使用情況?不同的操作系統對於「內存使用情況」有不同的概念。

  2. 由於增加了指針(Java引用的參數)大小,64位系統需要比32位系統更多的內存。您在臺式機上使用32位操作系統和JVM嗎?

  3. 您是否使用不同的JVM選項?中等活動的Java應用程序通常最終會使用-Xmx選項允許的所有內存,從而最大限度地減少垃圾收集所花費的CPU時間。此外,默認的最大堆空間是根據可用的物理內存來確定的 - 如果服務器有更多的內存,那麼Java應用程序也必然會使用更多的內存。

  4. 服務器JVM(請參閱-server JVM選項)具有不同的設置並優於內存使用情況下的性能。 -server選項是64位系統上的默認選項。

  5. 您是否完全確定這兩種情況下的應用程序負載是相同的?

1

應用程序在大塊中分配虛擬內存以提高性能和效率是很常見的。沒有人會因爲沒有效果而不願意優化這些東西。如果你實際上沒有問題,沒有什麼可以解決的。

虛擬內存不是稀缺資源。試圖減少vm的消耗是浪費精力。

+0

這取決於你是否有足夠的磁盤空間 - 如果你的服務器資源有限,可能值得減少一點。 – Chii

+1

@Chii:我完全不理解連接。永遠不會映射到駐留頁的虛擬內存不會佔用磁盤空間。 –

+1

@Chii不,真的,虛擬內存只是數字。有很多數字。服務器可能對其他資源有限制,但它可以擁有儘可能多的數字。 –

0

你是如何測量這些數字的?

在Linux上比較Windows任務管理器和ps(1)的數量是徒勞的,因爲它們的計算方式不同。例如,共享庫和共享內存在兩個平臺上的屬性都不相同。內存管理也完全不同。

另一方面,如果您指的是通過Runtime(或類似)從您的應用程序中收集的數字,那麼您必須查看JVM是如何以什麼參數啓動的。最重要的是參數-Xmx-Xms,但您可以在javajavaw的文檔中查找其他幾個人。

點1相關:

How to measure actual memory usage of an application or process?

相關問題