オブジェクトヒープ用に十分なスペースを予約できませんでした


277

プログラムを実行しようとするたびに、次の例外が繰り返し表示されます。

VMの初期化中にエラーが発生しました

オブジェクトヒープ用に十分なスペースを予約できませんでした

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

仮想メモリ(ページサイズ)とRAMサイズを大きくしようとしましたが、うまくいきませんでした。

このエラーを解消するにはどうすればよいですか?



2
また、仮想マシンでjdk / jre 1.6を使用しているときにこのエラーが発生し、コメントで指定された構成値を変更しようとしましたが、これは役に立ちませんでした。jdk1.7に更新した後、エラーがなくなり、より大きなXmxパラメーターが適用されました。Java 1.6以降、ヒープの使用に多くの変更があるようです。
Alexander.Iljushkin

回答:


214

-XX:MaxHeapSize=512m(または必要に応じて任意の数の)JVMを実行する(または-Xmx512m略して)


42
または短い-mx256mまたは-mx512m;)
Peter Lawrey

8
-mxは-Xmxおよび-XX:MaxHeapSizeと同じですか?
Erty Seidohl、2012

19
ありがとうございます。数値が大きすぎることも問題であり、同じエラーが発生する可能性があることが判明しました。
Dinesh Rajan 14

17
実際に100%機能するソリューションを見つけた人はいますか?この解決策は問題を一時的に解決しますが、突然、それが戻ってきます。私は16GBのRAMを持っていますが、これに飽き飽きしています。昔はすべてが良かった:[
Nilzor 2014年

6
x86またはx64 Javaを搭載したWindows 8では動作しません。
AndrewSmiley 2015

128

これは、32ビットのHotSpot vmに大きすぎる設定をした場合にも発生します。次に例を示します。

-Xms1536m -Xmx1536m

これが機能する可能性がある/機能する場所:

-Xms1336m -Xmx1336m

5
32ビットコマンドシェルで起動するときにこの問題が発生することを忘れていました。64ビットのコマンドシェルにはこの問題がない可能性があります。
djangofan 2012

私にとっては、デフォルト値と大きすぎる値で失敗したので、複数の値を試してください。答えてくれてありがとう!
Trax

47

これを修正する方法は次のとおりです。

  • 「スタート」->「コントロールパネル」->「システム」->「詳細設定」(タブ)->「環境変数」->「システム」に移動します。

    変数->新規:変数名:_JAVA_OPTIONS 変数値:-Xmx512M 変数名:Path
    変数値:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

これを適切なパスに変更します。


1
この答えにかなり似ていると思います...
That1Guy

いいね。上記に加えて、これも参照してください。stackoverflow.com/a/9350506/967638
Amarnath

46

私はjavacを使用しているときにこれに遭遇しましたが、コマンドラインオプションを取得しないようです。

-bash-3.2$ javac -Xmx256M HelloWorldApp.java 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

だからここでのソリューションはそれで_JAVA_OPTIONSを設定します

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M

そして、これはうまくコンパイルされます。

これは、RAMが多いがメモリのulimitが低いマシンで発生します。JavaはマシンでRAMを検出するため、大きなヒープを割り当てることにしましたが、ulimitsのために割り当てることはできません。


1
_JAVA_OPTIONSを指摘するための+1 —私の場合、javaは、書き込みアクセス権がないシェルスクリプト内のどこかから呼び出されているため、このオプションが推奨されます。
gerrit

こっちも一緒。私は大学のコンピューターを使用しているため、管理者ではなく(環境変数を変更できません)、コマンドラインオプションがまったく機能しませんでした。本当にありがとう!
Kimbluey 2017

38

32ビットJavaを実行するには、メモリ内に連続した空き領域が必要です。大きなヒープサイズを指定した場合、必要以上に利用可能な空き領域があったとしても、メモリにそれほど多くの連続した空き領域がない場合があります。

これらの場合、64ビットバージョンのJavaをインストールすると役立ちます。連続するメモリ要件は32ビットJavaにのみ適用されます。


1
-Xmx [bignumber] mオプションを使用した後もエラーが発生し続ける場合は、これが最良の答えだと思います。Apache jMeterを適切に実行するのに役立ちました。
RuudvK 2018

自動生成されたメインアクティビティ以外のコードを使用せずに新しいプロジェクトを作成したところ、このエラーが発生しました
behelit

1
@RuudvKの2番目です。64ビットをインストールすると、メモリ割り当てエラーをクリアしながら最大メモリを増やすことができました。これは受け入れられる答えになるはずです。
J Weezy

28

-Xmx512Mと組み合わせて-d64を使用して、64ビットVMを実行していることを確認します。64ビットマシンでは、64ビットの仮想マシンを実行しているはずだと思いましたが、違います。64ビットJavaをインストールした後、-d64オプションが機能し、-Xmxではるかに大きなメモリサイズを使用できます。

java -d64 -Xmx512M mypackage.Test

4
この答えが一番上になるはずです。64ビットJavaをインストールすることで問題が解決したことを理解するために、2か月かけてこの問題を解決しました(私の場合、-d64オプションは必要ありません)
Nilzor

ピックアップ_JAVA_OPTIONS:-d64 -Xmx1024M認識されないオプション:-d64 JVMを起動できませんでした。最大ヒープサイズ(-Xmx)が大きすぎるか、ウイルス対策ツールまたはファイアウォールツールが実行をブロックしている可能性があります。
アレクサンダー

14

私は同じエラーを受け取り、run.conf.batで設定することでこれを解決しました

Jboss5xの設定run.conf.batでJVMを実行します

ステートメントで渡しているため、空きメモリが利用できない場合は、run.conf.batを変更してください。

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"

7

ここにはすでにたくさんの答えがあることは知っていますが、どれも助けになりませんでした。最後に、ファイルを開いて/etc/elasticsearch/jvm.options変更しました。

-Xms2G
-Xmx2G

-Xms256M
-Xmx256M

それで解決しました。うまくいけば、これはここの他の誰かを助ける。


7

同様の問題がありました。64ビットマシンに32ビットバージョンのJavaをインストールしました。

そのバージョンをアンインストールし、64ビットバージョンのJavaをインストールする。私は問題を解決することができました。


6

クラスがTestパッケージで呼び出されているとしますmypackage。次のようにコードを実行します。

java -Xmx1024m mypackage.Test

これにより、1024 MBのヒープスペースがコード用に予約されます。512 MBが必要な場合は、以下を使用できます。

java -Xmx512m mypackage.Test

で少しメートルを使用して1024m512mなど、


6

このエラーは、サーバー上の物理メモリとスワップが実際に完全に使用されていることを示している場合があります。

最近、48 GBのRAMを搭載したRedHat Enterprise Linux 5.7を実行しているサーバーでこの問題が発生しました。走っているだけでも

java -version

同じエラーが発生し、問題がアプリケーションに固有のものではないことが判明しました。

ランニング

cat /proc/meminfo

は、MemFreeとSwapFreeの両方が、それぞれMemTotalとSwapTotalの値の1%を大幅に下回っていると報告しました。

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB

マシン上で実行中の他のいくつかのアプリケーションを停止すると、空きメモリの数が多少増えます。

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB

この時点で、Javaの新しいインスタンスは正常に起動し、アプリケーションを実行することができました。

(明らかに、私にとっては、これは一時的な解決策にすぎませんでした。そのマシンで実行されているプロセスをより徹底的に調べて、公称メモリ使用率レベルを下げるために実行できる何かがあるかどうかを確認するという、未解決のタスクがあります。アプリケーションの停止に頼る必要があります。)


ここでも同じですが、java -versiontopはまだいくつかの空きを示していますが、失敗しました:| (また、VMの初期化中にエラーが発生し、カードマーキングアレイ用に十分なスペースを確保できなかったとも言われています)修正はトップで実行され、どのプロセスが最も多くのRAM(VIRT列)を使用しているかを探し、それらを強制終了するように思われました[postgres、appdynamics for me]:|
rogerdpack 2016年

これはメモリの断片化が原因である可能性がありますか?上記の返答は、連続する空き領域について言及しています。
リックモリッツ

6

エラー:

エラーについて、「vmの初期化中にエラーが発生し、オブジェクトヒープjbossのために十分なスペースを予約できませんでした」

根本的な原因 :

  • 下記のように、JVMへのメモリ割り当てが不適切/不十分です。

  • 例:JAVA_OPTS = "-Xms1303m -Xmx1303m -XX:MaxPermSize = 256m"(jboss-eap-6.2 \ bin \ standalone.conf内)または"JAVA_OPTS = -Xms1G -Xmx1G -XX:MaxPermSize = 256M"(jboss-eap-6.2 \ bin内) \ standalone.conf.batこれは、JVMメモリ割り当てプールパラメータにすぎません。

解決 :

  • ヒープサイズを増やします。ヒープサイズを増やすには、
  • goto-> jboss-eap-6.2 \ bin \ standalone.conf.batまたはjboss-eap-6.2 \ bin \ standalone.conf
  • change-> JAVA_OPTS = "-Xms256m -Xmx512m -XX:MaxPermSize = 256m"ここで、-Xmsは最小ヒープサイズ、-Xmxは最大ヒープサイズです。
  • 通常、最小値と最大値を同じサイズにすることはお勧めしません。

  • アプリケーションをEclipseから実行している場合、

  • サーバーをダブルクリックします
  • 「起動構成を開く」を選択すると、「起動構成プロパティの編集」ウィンドウにリダイレクトされます。
  • このウィンドウで、タブ「(x)= Arguments」に移動します。
  • VM引数で、以下のようにヒープサイズを定義します。
  • 「-Dprogram.name = JBossTools:JBoss EAP 6.1+ランタイムサーバー」-server -Xms256m -Xmx512m -XX:MaxPermSize = 256m -Dorg.jboss.resolver.warning = true

以下からの引用Oracleのコマンドラインリファレンス:「最高のパフォーマンスを得るために、最大ヒープサイズと同じサイズに-Xmsを設定し、例えば:java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp
user1438038

3

私は最近この問題に直面しました。1024mまたは1280mのヒープサイズで始まる3つのJavaアプリケーションがあります。Javaはスワップで使用可能なスペースを調べており、十分なメモリがない場合、jvmは終了します。

この問題を解決するには、大量の仮想メモリが割り当てられているいくつかのプログラムを終了する必要がありました。

私は64ビットのJVMを備えたx86-64 linuxで実行していました。


3

私は適切な量のメモリ設定を持っていましたが、私にとっては、32ビットのjv​​mで64ビットのintellijを使用していました。64ビットVMに切り替えると、エラーは発生しなくなりました。



2

32ビットJVMを実行している場合は、ヒープサイズを小さい値に変更するとおそらく役立つでしょう。これを行うには、argsをjavaに直接渡すか、次のような環境変数を使用します。

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

64ビットJVMでは、より大きなヒープサイズが機能する-Xms512M -Xmx1536Mはずです。

Java7のjava -version場合はjava -d32、またはを実行して、実行しjava--d64ているバージョンを確認します。


1

とにかく、それを修正する方法は次のとおりです。[スタート]-> [コントロールパネル]-> [システム]-> [詳細設定(タブ)]-> [環境変数]-> [システム変数]-> [新規]に移動します。変数名:_JAVA_OPTIONS変数値:-Xmx512M

または

次のようにant呼び出しを変更します。

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>

それは私のために働いた。


1

VMの初期化中にエラーが発生しました1572864KBオブジェクトヒープ用の十分なスペースを予約できませんでした

settings.gradeファイル1536のメモリの値を512に変更しました。


1

「スタート」->「コントロールパネル」->「システム」->「詳細設定(タブ)」->「環境変数」->「システム変数」->「新規」に移動します。

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

これをグローバルに設定すると、IntelliJに提供できるヒープサイズが制限されます。
user3056052

0

Javaプログラムを実行している場合:-Linuxの正しいコマンドを使用してターミナルでプログラムを実行します。たとえば、「java -jar myprogram.jar」となり、-Xms256m -Xmx512mを追加します。たとえば、「java -jar myprogram.jar Xms256m -Xmx512m '

.shスクリプト(linux、mac?)または.batスクリプト(windows)を実行している場合は、スクリプトを開き、javaオプションが存在する場合はそれらを探してメモリを増やします。

上記のすべてが機能しない場合は、プロセス(Windowsではctrl + alt + delete)(linux / macではps aux)を確認し、メモリを多く使用し、オペレーティングシステムに不要なプロセスを強制終了します。=>プログラムを再実行してください。


0

CASSANDRA_HOME / bin / cassandra.batには、次の構成があります。

REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^

たとえば、2Gを1Gかそれより少ない数に減らすことができ、それでうまくいくはずです。

UNIXボックスで実行している場合も同様に、.shファイルを適切に変更します。



0

時々それは

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

次のように設定した場合:

$ sysctl vm.overcommit_memory=0

うまくいくはずです。


0

交換する-Xmx2G-Xms512Mやカサンドラbinディレクトリにあるcassandra.batファイル内の任意のより大きなメモリサイズ。


0

androidフォルダーのgradle.propertiesファイルを開きます。

この行を置き換えます:

org.gradle.jvmargs=-Xmx1536M

と:

org.gradle.jvmargs=-Xmx512m

説明:Gradleドキュメントの上限:

要求されたビルド環境で最大ヒープサイズが指定されていない場合、デーモンは最大512MBのヒープを使用します。


-2

以下のようにPOMファイルを変更する必要はありません

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>

2
誰がPOMファイルについて何か言いましたか?
Henley Chiu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.