2012-12-14 43 views
2

Windows上的JDK最多需要2 GB RAM。即使我們爲JDK分配更多的RAM,它並不需要它。如果我需要在Windows上運行需要8 GB RAM的進程,我怎麼能實現它?如何在Windows上爲我的JDK分配8 GB(不是1 GB)的RAM

我們是否有任何其他提供商提供的支持JDK的JDK? Memcached爲我們提供了額外的緩存,可以使用......但這不是我所期待的。假設我需要在Windows窗口中運行帶有8 GB RAM的jMeter; Memcached不會幫助確定.. 有沒有提供給我這個提供商?以前我以爲兵馬俑是這樣做的;但看起來像這樣也像Memcached。

我使用Windows 7.如果需要,我也可以使用Windows Server ..我只需要讓它運行。在64位操作系統

+2

你應該告訴你使用的是哪個版本的Windows,無論如何,它更像是一個'serverfault'的問題。 – SJuan76

+3

32位或64位jdk?你需要64位來獲得超過2演出 –

回答

3

據我所知,每32個進程2GB的內存限制在Windows上。然而,這個頁面似乎表明有寄存器設置可將其擴展到3GB。具體IMAGE_FILE_LARGE_ADDRESS_AWARE

http://msdn.microsoft.com/en-gb/library/windows/desktop/aa366778(v=vs.85).aspx

因此,如果您使用的是32位JDK,並堅持了下來,這是是你最好的選擇,但是如果你可以升級到64位的JDK這樣做,因爲如果你使用64在這64位版本的Windows上,這個限制變成了8TB

+0

從未在64位機器上看到過這個問題。我有一個Windows 8GB的xmx java服務器 – kromit

+0

我的答案不是很清楚我會澄清一點。 –

+2

正如您鏈接到的頁面所解釋的,此限制僅適用於32位進程。在64位Windows上使用64位JRE時,不會出現此問題。 – Jesper

3

使用64位JDK修復它

0

我已經在我的64位Windows機器上成功地使用了12G(-Xmx12G),並且每個字節都使用了(64位)JVM。

我偶然發現的唯一問題是,有時需要在命令行上明確提供-d64,如果是64位JDK/JRE,則需要事件。

1

如果您使用-ms8g -mx8g並且它正確啓動,那麼它的「最小」堆大小爲8 GB。但是,如果您的程序不使用8 GB,它仍然可能只有2 GB或更少。即一個hello World程序不會使用8 GB,不管你給它什麼設置。 (除了一個我不認爲有用的模糊區域外)

什麼使得32位應用程序,32位是它的有限地址空間。它仍然可以使用64位甚至128位數據。它可以解決的內存量有限,可以區分它。 Windows爲它自己的目的使用分配的地址空間,這意味着你的真正限制是堆大約1.2-1.5 GB(不是2^32,這是4 GB)

值得注意的是,64位JVM仍然使用32位引用,最大堆大小約爲30 GB。即引用不是像32位程序那樣的普通存儲器地址。

0

如果你有大量的緩存數據,它們最好駐留在java堆中。否則,GC將花費大量時間遍歷它,反覆無效。

Terracotta的BigMemory通過將數據放入直接ByteBuffer(它位於Java堆外部)來實現這一點。也許還有免費/開放的。

相關問題