4

次の問題:

  1. 開発したプログラムを開始します (-Xmx550M)
  2. 90 MB のファイルを読み込みます

この読み込みは、下の図の使用済みヒープのピークです。その後、ヒープ サイズは 130 MB から 500 MB に増加しますが、必要なのは 110 MB だけです。

わかりました、問題ありません、迷惑ですが、わかりました。しかし、ここで保存プロセス (約 100 MB が必要) を開始すると、Java VM が java.lang.OutOfMemoryError: Java heap space 例外でクラッシュします。

ヒープサイズと使用ヒープ (-Xmx550M)

750 MB のヒープ サイズでアプリケーションを起動すると、問題なく動作します。短いピークが表示され、正常に動作します。 ヒープサイズと使用ヒープ (-Xmx750M)

ここで私の質問: 550 MB のヒープ サイズで OutOfMemoryError が発生するのはなぜですか? アプリケーションは 400 MB しか必要としません (最高ピーク時)。

それを修正する方法がわかりません:(

私を助けてください!

4

2 に答える 2

1

100Mb のファイルをロードしても、メモリ内でこのファイルに使用される構造体が 100M を占有するという意味ではありません。たとえば、String がある場合、その長さに対して 4 バイトのオーバーヘッドもあります。

于 2012-12-13T22:51:21.187 に答える
1

データはサンプリングされます。失敗する直前に 400 MB を使用していましたが、しばらくしてから 600 MB などのより多くのメモリを使用しようとしましたが、次のサンプルが取得されるまでに OOME が発生し、使用量がはるかに少なくなったため、これは表示されませんでした.

つまり、プログラムは、グラフで見るよりも速くメモリを使用できます。

于 2012-12-13T23:00:57.033 に答える