簡體   English   中英

在運行 64 位 JVM 的 Windows 10 64 位中用於 Java 進程的最大堆大小

[英]Maximum heap size using for Java process in Windows 10 64 bit running 64 bit JVM

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

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

我在互聯網上做了一些研究,但找不到與我正在使用的系統規范相關的任何具體答案。 java 進程可以在 Windows 10 64 位和 64 位 JVM 上使用超過 2 GB 的空間嗎? 作為Java 堆大小調整指南, Windows XP/2008/7 的限制為 2 GB。

在 64 位機器上,使用 64 位 JVM,您可以使用多 GB 的堆(幾十和幾十 GB)。 除了可用內存(以及 64 位指針的理論地址空間)之外,我不確定它是否有任何限制。

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

如果 VisualVM 沒有顯示您使用超過 2GB(使用-Xms給出的初始堆大小),那么它可能不需要更多。 您已授予最多使用 3GB ( -Xmx ) 的權限,但 JVM 不會僅僅為了好玩而分配更多內存。

可以為 32 位 JVM 分配的最大堆是 2^32 = 4G,同樣 4gb 將被分成 1+ GB 供 VM 用於運行時類。 它因 Windows 而異,約為 2GB,而 linux 約為 3GB。 當您使用 64 位機器時,可用的最大堆是 2^64,它足以讓您輕松運行 BFS。

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

您無法為 64 位體系結構指定確定的大小,但簡單的測試可幫助您找到可用的最大連續空間或可為進程分配的最大連續空間。 這可以通過使用簡單的命令進行如下測試。 嘗試如下 java -Xmx -version 如果上述命令給出結果,那么您的系統可以允許 Xmx 達到該級別,如果失敗,則您無法指定該值。

系統測試很少。 我用 20G.40g、100G、160G、300G 測試了值,所有這些都給出了 java -version 輸出,但嘗試使用 1600G 會引發錯誤。 測試的輸出 C:\\Users\\mpalanis>java -Xmx300G -version

java 版本“1.7.0_80”Java(TM) SE 運行時環境(構建 1.7.0_80-b15)Java HotSpot(TM) 64 位服務器 VM(構建 24.80-b11,混合模式)

C:\\Users\\mpalanis>java -Xmx1600G -version

VM 初始化期間發生錯誤無法為請求的 1677805568KB 堆分配 52431424KB 位圖用於並行垃圾回收。

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

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

希望這個解釋有幫助。

如果您使用 IntelliJ Idea 作為 IDE,則可以直接從它執行此操作,

  1. 從主菜單中,選擇幫助 | 更改內存設置
  2. 設置您要分配的必要內存量,然后單擊保存並重新啟動。

這會更改 JVM 使用的-Xmx選項的值,並使用新設置重新啟動 IntelliJ IDEA。

暫無
暫無

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

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