2017-04-07 21 views
1

Windows 10 64ビットで実行する最大ヒープサイズは64ビットJVM?私のマシンはRAMのです。そして私はJava 8を実行しています。 実験的な目的のために巨大なグラフ上でBFSを実行しようとしています。 BFSを実行している間、私はで使用されているヒープサイズを監視しています。Java Visual VMビジュアルVMのヒープ使用率によると、常に未満2000メガバイトであるにかかわらず、次のJVMパラメータにWindows 10でJavaプロセスで使用する最大ヒープサイズ64ビットJVMを実行する64ビット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以上を使用できますか? Guidelines for Java Heap sizingとして、Windows XP/2008/7の制限は2 GBです。

は、64ビットJVMを使用すると、マルチギガバイト・ヒープ(数十GB単位と数十)で動作することができ、64ビットマシンでは、 ブラザー

+0

だから、技術記事には常に日付が付いているはずです。私は、この記事が時代遅れであるか間違っているかは分かりませんが、いずれの場合も32ビットシステムでは間違っています。しかし、とにかく、 '-Xmx3072m'オプションを指定したときにJVMが起動すると、3GiBヒープをサポートします。 2000MBを超えて使用しない場合、アプリケーションは単にRAMを増やす必要はありません。 JVMは何をすべきですか?ダミーオブジェクトでヒープを埋めると、より高い利用率が得られます。 – Holger

答えて

2

、ありがとうございました。私は利用可能なメモリ(および64ビットポインタの理論上のアドレス空間)を除いて、それが何らかの形で制限されているかどうかはわかりません。

巨大なヒープで作業している場合、GCにはさらに多くの作業があります。優れたパフォーマンスを維持するには、垂直方向ではなく水平方向にスケールする必要があるかもしれません。

VisualVMが2GB(最初のヒープサイズは-Xmsで与えられます)を超えて使用していると表示されない場合は、それ以上のものは必要ありません。 を最大で 3GB(-Xmx)まで使用する許可を与えましたが、JVMはそれを楽しむためだけに多くのメモリを割り当てません。

+0

これはまったく悪い答えではありません。*単に 'Xmx'と' Xms'が何であるかを説明しているかもしれません。一つプラス。 – Eugene

+0

さらにメモリの割り当て*を実施しても、 '-Xms'を介して、JVMが*使用していることを意味するものではありません。アプリケーションがそれを必要としない場合、それを強制的に使用する方法はありません(そして、それが可能ならば、その意味はどこですか?)。 – Holger

+0

実際には、** OutOfMemoryError ** ** Javaヒープスペース**は、3GBを指定しているにもかかわらず、クラッシュする前に2GB以上を占めることはできません。 – Brother

1

最大ヒープ数は32ビットに割り当てることができます。JVMは2^32 = 4Gです。ランタイムクラスに使用するには、4GBを1GB以上に分割します。それは〜2GBであり、それは〜3GBのLinuxであるウィンドウを変更します。 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の 出力:\ Users \ユーザーmpalanis> Javaは-version

Javaのバージョン "1.7.0_80" のJava(TM)SEランタイム環境(1.7.0_80-B15を構築) は、Java HotSpot(TMを-Xmx300G )64ビットサーバーVM(ビルド24。80-B11、混合モード)

C:\ Users \ユーザーmpalanis> javaは-Xmx1600G -version

エラーは、要求1677805568キロバイトヒープに並列ガベージコレクションのために52431424キロバイトのビットマップを割り当てることができませんVM の初期化中に発生しました。

エラー:Java仮想マシンを作成できませんでした。

エラー:致命的な例外が発生しました。プログラムは終了します。

この説明は役立ちます。

+0

コマンドをありがとう、私は私のマシン上でそれをテストして、私は 'java -Xmx650 -version'の出力を見ることができます。 – Brother

関連する問題