2017-04-06 70 views
0

所以,我一直在使用惠普媒體中心一段時間,只有大約4千兆字節的內存,所以當然,我正在運行一個32位的Windows 7.我一直試圖運行一個程序,使用Java虛擬機和我可以使用它的jvm論證,但是,我需要更多的治癒空間,因爲我沒有足夠的內存,我聽說有可能使程序使用交換而不是ram。那麼,有沒有一個jvm的論證或程序,我可以使用它來製作一個程序使用RAM和交換或交換?任何答覆表示感謝,帽子可以幫助。並且在任何人說出來之前,是的,我知道swap因爲我使用常規HDD而比ram慢。Ram + Swap JVM參數/工具?

+0

如果我正確地理解了您的問題,那麼您使用的是32位操作系統,這意味着一個32位JVM。我相信可以分配給JVM的最大內存是4GB(請參閱http://stackoverflow.com/questions/1434779/maximum-java-heap-size-of-a-32-bit-jvm-on-a -64位操作系統)。即使分配4GB,操作系統也可能會將某些部分交換到磁盤。 – KevinO

回答

1

據我所知,這不是關於jvm的一個論點。 jvm進程的堆取自它運行的操作系統。這是從虛擬內存,其中已經包含交換空間,如果你有這樣的。你的操作系統有多少交換完全是該特定操作系統的配置。由於你正在運行32位的窗口,你的jvm也是32位。而一個32位的JVM可以使用理論上的最多使用4GB的RAM;在實踐中,它通常不超過1.3GB(正如評論中所指出的那樣);所以添加交換不會讓你的生活更輕鬆。首先你需要一個64位的操作系統。

+1

即使Window 7上的32位進程的理論限制僅爲3 GiB,但是,它也將包含代碼,I/O緩衝區和其他非堆數據。但是,JVM實現無法爲堆使用多於2個GiB(較低的地址空間)。因此,如果沒有「largeaddressaware」標誌,你必須減去本地庫的代碼和數據,所以你非常幸運,如果你獲得1.6 GiB,通常它更像1.3 GiB。 – Holger

+0

@Holger說實話我甚至沒有試過看我會得到多少。這是我記得看到的東西,所以認爲它是理所當然的。將更新。 – Eugene

+1

我們與客戶有過這個問題。仍然使用32位JVM的一個原因是jdbc-odbc橋接,而odbc驅動程序不是「largeaddressaware」,所以可用堆在加載時或其他方式下降,例如,當您執行最大堆數1.4 GiB到1.5GiB,加載驅動程序失敗,原因是缺乏本地資源。但是,JVM使用的庫(或其版本)似乎在每次更新中都會發生變化,因此找到最大堆(以及每個字節的計數,它確實對性能產生影響)始終是試錯。 – Holger