47

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

「java.lang.OutOfMemoryError: Java heap space」が発生し続けるため、これを行っていました。35.5Mb の .txt ファイルを読み込んでいますが、このエラーは、" while((line = reader.readLine()) != null)" ループを使用してファイルを読み込んでいるときに発生します。1024MBで十分だと思っていました。誰でも私を助けることができますか?

4

4 に答える 4

35

はい、上限はありますが、システムによって異なります。試してみて、限界に達するまで 2 倍にしてから検索してみてください。少なくとも 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 であることを示唆しています。

于 2009-01-20T13:35:14.247 に答える
5

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

編集:あなたが求めた詳細。Eclipse 3.4で

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

  2. クラスが「Java Application」サブツリーの左側のリストに表示されていない場合は、左上隅にある「New Launch configuration」をクリックします。

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

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

    必要なものには1024mで十分だと思います!

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

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

于 2009-01-20T13:27:26.180 に答える
1

2GBくらいだと思います。ピート・カーカムの答えは非常に興味深く、おそらく真実ですが、私はエラーなしで3GB以上を割り当てましたが、実際には3GBを使用していませんでした。これが、スワップスペースなしで2GBのRAMに2.5GBを割り当てることができた理由を説明している可能性があります。実際には、2.5GBを使用していませんでした。

于 2010-01-19T21:43:22.770 に答える
1

Java ヒープを設定する際の一般的なエラーについては、こちらをご覧ください。コンピューターの物理メモリよりも大きな値にヒープ サイズを設定している可能性があります。

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

于 2009-01-20T13:27:56.540 に答える