web-dev-qa-db-ja.com

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

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

  • -Xmxパラメーターの設定、例: -Xmx3000m。このアプローチは、JVMの作成時に失敗します。私がグーグルで調べたところ、-Xmxは2GB未満でなければならないようです。

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

JVMの最大ヒープサイズを大きくしようとする別の方法はありますか?コンピューターの仕様の概要は次のとおりです。

  • OS:Windows 7(64ビット)
  • プロセッサー:Intel Core i7(2.66 GHz)
  • メモリー:8 GB
  • Javaバージョン:
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)
83
Alceu Costa

Oracle から64ビットJVMを入手してください。

45
James K Polk

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

90
mohitsoni

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

14
G__

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に近づきます。

8
Jean B

以下の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 "$@"
3