web-dev-qa-db-ja.com

jvmメモリを増やすときにXmxに設定できる最大数はありますか?

最大値はありますかXmxに設定できるサイズは? 1024mに設定すると、Eclipseが正常に開きます。 1024より上に設定すると、Eclipseが開かず、「jvmが終了しました。終了コード= -1」というエラーが表示されます...

「Java.lang.OutOfMemoryError:Java heap space」を取得し続けるため、これを行っていました。35.5Mbの.txtファイルを読み込んでいますが、このエラーは、 「while((line = reader.readLine()) != null)」ループを使用してファイルを作成しました。1024MBあれば十分だと思っていました。

44
guess who

はい、最大値はありますが、システムに依存します。試してみて、制限に達するまで倍増してから検索します。少なくともLinux上のSun JRE 1.6では、常に有益なエラーメッセージではないにしても興味深いことがあります(peregrinoは、2G RAMおよびスワップなし)で32ビットubuntuを実行しているネットブックです):

peregrino:$ Java -Xmx4096M -cp bin WheelPrimes 
Invalid maximum heap size: -Xmx4096M
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.

peregrino:$ Java -Xmx4095M -cp bin WheelPrimes 
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified

peregrino:$ Java -Xmx4092M -cp bin WheelPrimes 
Error occurred during initialization of VM
The size of the object heap + VM data exceeds the maximum representable size

peregrino:$ Java -Xmx4000M -cp bin WheelPrimes 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

(experiment reducing from 4000M until)

peregrino:$ Java -Xmx2686M -cp bin WheelPrimes 
(normal execution)

ほとんどが自明ですが、-Xmx4095Mはかなり奇妙で(おそらく符号付き/符号なしの比較?)、スワップなしの2GBマシンで2686Mを予約すると主張しています。ただし、OSで対応できるのが最大サイズの場合、32ビットVMの最大サイズは2Gではなく4Gです。

33
Pete Kirkham

32ビットのJVMには最大2GBのメモリがあると思いますが、これは時代遅れかもしれません。正しく理解できたら、Eclipseランチャーで-Xmxを設定します。 Eclipseから実行するプログラムのメモリを増やしたい場合は、「実行->実行構成...」で-Xmxを定義する必要があります(クラスを選択し、[引数]タブを開いてVM引数エリア)メニュー、およびEclipse起動時ではありません

編集:要求した詳細。 Eclipse 3.4で

  1. 実行->実行構成...

  2. クラスが「Javaアプリケーション」サブツリーの左側のリストにリストされていない場合は、左上隅の「新規起動構成」をクリックします

  3. 右側の[メイン]タブで、プロジェクトとクラスが正しいものであることを確認します

  4. 右側の「引数」タブを選択します。これには2つのテキスト領域があります。 1つは、メインメソッドに提供されるargs []配列に入るプログラム引数用です。もう1つは、VM引数用です。 VM引数を持つもの(下のiirc)に以下を入れます:
    -Xmx2048m

    1024mはあなたが必要とするものに十分すぎると思います!

  5. [適用]をクリックし、[実行]をクリックします

  6. 動作するはずです:)

5
user54579

約2GBだと思います。 Pete Kirkhamの回答は非常に興味深いものであり、おそらく真実を保持していますが、3GBをエラーなしで割り当てましたが、実際には3GBを使用していません。 2GB RAMにスワップスペースなしで2.5 GBを割り当てることができた理由を説明できます。実際には、2.5 GBを使用していませんでした。

1
Stephen Price

Javaヒープの設定における一般的なエラーについては、 this をご覧ください。おそらく、ヒープサイズをコンピューターの物理メモリよりも大きな値に設定しているでしょう。

ヒープサイズを増やすことで、この問題の解決を避ける必要があります。代わりに、アプリケーションをプロファイリングして、このような大量のメモリを消費している場所を確認する必要があります。

1
kgiannakakis