メモリを集中的に使用するアプリケーションのJVM最大ヒープサイズを増やす


88

2GBを超えるメモリを使用するJavaアプリケーションを実行する必要がありますが、ヒープの最大サイズを増やすのに問題があります。これまでのところ、私は次のアプローチを試みました:

  • -Xmxパラメータを設定します(例:-Xmx3000m)。このアプローチは、JVMの作成時に失敗します。私がグーグルで調べたところ、-Xmxは2GB未満である必要があるようです。

  • -XX:+ AggressiveHeapオプションを使用します。この方法を試すと、コンピュータに8 GBのメモリがあるにもかかわらず、ヒープサイズが1273.4 MBであることを示す「メモリ不足」エラーが発生します。

JVMの最大ヒープサイズを増やすための別の方法はありますか?コンピュータの仕様の概要は次のとおりです。

  • OS:Windows 7(64ビット)
  • プロセッサー:Intel Core i7(2.66 GHz)
  • メモリー:8 GB
  • java -version:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

7
ところで:最小および最大のメモリサイズが標準オプションになりました。-Xmsと-Xmxの代わりに-msと-mxを使用できます。-バツ??非標準オプション用に予約されています。
Peter Lawrey

2
どのJVMの標準ですか?これらはまだHotSpot JVMの非標準です(1.8の時点)。docs.oracle.com/javase/8/docs/technotes/tools/unix/…を
Huckle

-mxと-msは存在し、機能しますが、公式のJavaドキュメント@PeterLawreyで見つかりません>ドキュメントへのリンクを追加できますか?ありがとう
Michal Bernhard

2
@MichalBernhardは、Java 1.1との下位互換性があります。私はそれがそのバージョンについて文書化されているのを見ましたが、今は見つけるのが難しいかもしれません。;)
ピーターローリー、

1
説明してくれた@PeterLawreyに感謝します。しかし、それが現在標準であると言うとき、それはJava 1.1からの標準であることを意味します(しかし、それ以降のバージョンのドキュメントではありません)?奇妙に思われる:) btw Java 1.1のドキュメントにリンクを見つけましたが、あなたは正しいです。ad.ntust.edu.tw
Michal Bernhard

回答:



96

JVMを32ビットモードで使用している場合、割り当て可能な最大ヒープサイズは1280 MBです。したがって、それを超える場合は、64モードでJVMを呼び出す必要があります。

以下を使用できます。

$ java -d64 -Xms512m -Xmx4g HelloWorld

どこ、

  • -d64:64ビットJVMを有効にします
  • -Xms512m:初期ヒープサイズを512 MBに設定します
  • -Xmx4g:最大ヒープサイズを4 GBに設定します

要件(YMMV)に従って、-Xmsおよび-Xmxで調整できます。

JVMのパフォーマンスチューニングに関する非常に優れたリソース。http//java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html


私のJVMは32ビットで、最大-Xmx1024Mを許可しています。64bit版も試してみます。
kiltek 2013年

私はJVM 64ビットを試しましたが、完全に機能しました。最大ヒープサイズを4096 MBに設定できるようになりました。32ビットと64ビットの両方がインストールされている場合、少なくともWindowsでは、アプリケーションのJavaパスがインストールされている新しい64ビットバージョンを指すようにする必要があります。そうしないと、エラーが解決しません。Windowsでは、これは多くの場合、システムの環境変数のJavaパスを変更することで実行できます。
Fabiano 2015

最大ヒープの制限は1280ではなく、1700MBに近いと思います。32ビットJVMインストールで最大ヒープの1600MBを使用しましたが、正常に動作しました。
Fabiano 2015

コマンドのHelloWorld引数は何ですか?Linuxでjava -jar myApp.jarコマンドを使用して開始されるJavaプロセスの最大数を設定したい場合、このコマンドをどのように使用できますか?
LordScone

こんにちは、設定できるJavaヒープの最大サイズはどれくらいですか?アプリケーションを実行すると、マシンのデフォルトの-Xmxが4GBになりますが、4GB以上に設定できますか?
2018

14

2GBの制限は32ビットJavaに対するものだと思います。v1.6は常に64ビットだと思っていましたが、-d64オプションを追加するだけで64ビットモードを強制してみてください。


-D64オプションが機能しませんでした。GregSの提案に従って64ビットJVMを使用して結果を報告します。
Alceu Costa

1
-d64および-d32スイッチは、Solarisでのみ正しく機能します(少なくともこれらのドキュメントによれば):java.sun.com/docs/hotspot/HotSpotFAQ.html#64bit_layering
Lukasz Stelmach

私は両方のオプションを試しました。-d64を使用すると、Xmxオプションを指定しなくても、JVMの起動に失敗します。-D64は、Xmxを指定しない場合にのみ機能します。
Alceu Costa

@Lukasz -d64と-d32もAppleのJVMで動作するようです。しかし、そのドキュメントは、SunのWindowsおよびLinux JVMでは機能しないことを示唆しているようです。
G__

8

32ビットJavaは約1.4〜1.6 GBに制限されています。

Oracle 32ビットヒープに関するFAQ

見積もり

32ビットJVMの理論上の最大ヒープ制限は4Gです。利用可能なスワップ、カーネルアドレス空間の使用、メモリの断片化、VMのオーバーヘッドなど、さまざまな追加の制約により、実際には制限ははるかに低くなる可能性があります。最近のほとんどの32ビットWindowsシステムでは、最大ヒープサイズの範囲は1.4Gから1.6Gです。32ビットのSolarisカーネルでは、アドレス空間は2Gに制限されています。32ビットVMを実行している64ビットオペレーティングシステムでは、最大ヒープサイズが大きくなり、多くのSolarisシステムで4Gに近づきます。


4

以下のconfは私にとってはうまくいきます:

JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/
PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH
export PATH
export JAVA_HOME

JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server"

/JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "$@"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.