簡體   English   中英

我如何在Windows上為我的JDK分配8 GB(不是1 GB)RAM

[英]How can I allocate 8 GB ( not 1 GB ) RAM to my JDK on windows

Windows上的JDK最多需要大約2 GB RAM。 即使我們為JDK分配了更多RAM; 它並不需要它。 如果我需要在Windows上運行需要8 GB RAM的進程,請執行以下步驟: 我怎么能實現它?

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

我正在使用Windows 7.如果需要,我也可以使用Windows Server ..我只需要讓它運行。

在64位操作系統上使用64位JDK修復它

據我所知,Windows上每32位進程有2GB內存限制。 但是,此頁面似乎表明存在一些寄存器設置,可以將其擴展到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位版本的Windows上使用64位JDK一樣,限制變成8TB

如果使用-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位程序一樣。

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

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

如果您有大量的緩存數據,則最好將它們駐留在Java堆之外。 否則,GC將花費大量時間遍歷它,反復且毫無結果。

Terracotta的BigMemory通過將數據放在Java堆之外的直接ByteBuffer來實現這一點。 也許也有免費/開放的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM