2017-04-07 91 views
1

什麼是最大堆運行大小爲上運行的Java進程Windows 10 64位,與64位JVM?我的機器有RAM的8 GB。我正在運行Java 8。 我試圖在巨大的圖上運行BFS以用於實驗目的。在運行BFS時,我正在監視在Java Visual VM中使用的堆大小。根據視覺VM堆利用率始終低於2000 MB,無論提供以下JVM的參數在Windows 10 64位運行64位JVM中使用Java進程的最大堆大小

-Xms2048m 
-Xmx3072m 
-XX:ReservedCodeCacheSize=240m 
-XX:+UseConcMarkSweepGC 
-XX:SoftRefLRUPolicyMSPerMB=50 
-ea 
-Dsun.io.useCanonCaches=false 
-Djava.net.preferIPv4Stack=true 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:-OmitStackTraceInFastThrow 

我做了一些研究過互聯網,但無法找到相關的我使用的系統規範的任何具體的答案。在Windows 10 64位和64位JVM上,Java進程可以使用多於2 GB的內存嗎? As Guidelines for Java Heap sizing Windows XP/2008/7的限制爲2 GB。

謝謝 兄弟

+0

這就是爲什麼技術文章應該總是有一個日期。我不知道這篇文章是過時還是錯誤,但無論如何,這對32位系統來說甚至是錯誤的。但無論如何,如果您在指定'-Xmx3072m'選項時啓動JVM,則它支持3GiB堆。如果它不超過2000MB,那麼你的應用程序根本不需要更多的RAM。 JVM應該做什麼,用虛擬對象填充堆以獲得更高的利用率? – Holger

回答

2

在64位機,64位JVM可以多技嘉堆(數十座金紫荊星章的)工作。除了可用內存(以及64位指針的理論地址空間)之外,我不確定它是否受到任何限制。

當然,如果您正在處理一個巨大的堆,GC還有很多工作要做,您可能會發現需要水平縮放而不是垂直縮放,以保持良好的性能。

如果VisualVM未顯示使用超過2GB(初始堆大小爲-Xms),那麼它可能只是不需要更多。您已授權使用,最大爲 3GB(-Xmx),但JVM不會爲了它的樂趣而分配更多內存。

+0

這根本就不是一個錯誤的答案,*可能是*只是解釋'Xmx'和'Xms'是什麼......一個加上 – Eugene

+0

即使你執行更多內存的*分配*通過'-Xms',它並不意味着JVM將*使用*它。如果應用程序不需要它,那麼就沒有辦法強制它使用它(如果可能的話,它的意義在哪裏?)。 – Holger

+0

實際上,我得到了** Java堆空間**上的** OutOfMemoryError **,無論我指定3GB並且我的java進程在崩潰之前都不能佔用超過2GB的事實。 – Brother

1

可以爲32位JVM分配最大堆數爲2^32 = 4G,再次將4GB分配爲1+ GB以供VM用於運行時類。它變化的Windows大約是2GB,而linux是大約3GB。 由於您使用64位機器,可用的最大堆數爲2^64,因此您可以輕鬆地運行BFS。

您可以使用vm標誌監視可用內存「-XX + PrintFlagsFinal | grep -iE HeapSize」會告訴您可以使用的最大可用堆大小。配置略低於此,並開始使用...

+0

我會嘗試你提供的vm標誌。謝謝 – Brother

1

沒有確定的大小,您可以指定64位體系結構,但簡單的測試可以幫助您找到什麼是最大的連續空間可用或可以分配給一個進程。這可以通過使用簡單命令進行如下測試。 請嘗試如下 java -Xmx -version 如果上述命令給出了結果,那麼系統可能被允許將Xmx設置爲該級別,如果失敗則不能指定該值。

很少從系統測試。 我用20G.40g,100G,160G,300G測試了這些值,所有這些給出了java -version輸出,但是用1600G嘗試了拋出錯誤。測試的 輸出 C:\用戶\ mpalanis>的java -Xmx300G -version

Java版本 「1.7.0_80」 的Java(TM)SE運行時環境(建立1.7.0_80-B15) 爪哇熱點(TM )64位服務器虛擬機(版本24。80-B11,混合模式)

C:\用戶\ mpalanis>的java -Xmx1600G VM 無法分配52431424KB位圖平行垃圾收集所請求的1677805568KB堆的初始化過程中出現-version

錯誤。

錯誤:無法創建Java虛擬機。

錯誤:發生致命異常。程序將會退出。

希望這個解釋有幫助。

+0

感謝您的命令,我已經在我的機器上測試過它,並且可以看到'java -Xmx650 -version'的輸出,並且超過650會給我帶來錯誤。 – Brother

相關問題