2GB以上を使用するJavaメモリ集約型アプリケーションを実行する必要がありますが、ヒープの最大サイズを増やすには問題があります。これまでのところ、私は次のアプローチを試しました。
-Xmxパラメーターの設定、例: -Xmx3000m。このアプローチは、JVMの作成時に失敗します。私がグーグルで調べたところ、-Xmxは2GB未満でなければならないようです。
-XX:+ AggressiveHeapオプション を使用します。このアプローチを試みると、コンピューターに8GBのメモリがあるにもかかわらず、ヒープサイズが1273.4 MBであるという「メモリ不足」エラーが表示されます。
JVMの最大ヒープサイズを大きくしようとする別の方法はありますか?コンピューターの仕様の概要は次のとおりです。
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)
Oracle から64ビットJVMを入手してください。
JVMを32ビットモードで使用している場合、割り当て可能な最大ヒープサイズは1280 MBです。そのため、それを超えたい場合は、64モードでJVMを呼び出す必要があります。
以下を使用できます。
$ Java -d64 -Xms512m -Xmx4g HelloWorld
ここで、
要件(YMMV)に従って-Xmsおよび-Xmxで調整できます。
JVMのパフォーマンスチューニングに関する非常に優れたリソースであり、次の内容を確認できます。 http://Java.Sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
2GBの制限は32ビットJava用だと思います。 v1.6は常に64ビットだと思っていましたが、64ビットモードを強制的に試してみてください。-d64オプションを追加してください。
32ビットJavaは、約1.4〜1.6 GBに制限されています。
引用
32ビットJVMの理論上の最大ヒープ制限は4Gです。使用可能なスワップ、カーネルアドレス空間の使用、メモリの断片化、およびVMオーバーヘッドなどのさまざまな追加の制約により、実際には制限ははるかに低くなります。最新の32ビットWindowsシステムでは、最大ヒープサイズは1.4Gから1.6Gの範囲です。 32ビットSolarisカーネルでは、アドレス空間は2Gに制限されています。 32ビットVMを実行する64ビットオペレーティングシステムでは、最大ヒープサイズが大きくなり、多くのSolarisシステムで4Gに近づきます。
以下の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 "$@"