1

私は次のようにJavaで非常に大きな画像を作成しようとしています。

BufferedImage bi = new BufferedImage(58240、1664、BufferedImage.TYPE_INT_RGB);

明らかに画像は非常に大きいです。

今私が抱えている問題は、一部のコンピューターでは100%正常に動作しているように見えますが、他のコンピューターでは非常に遅いということです(これは、仕様とは関係ありません)。

私の最も大きな進歩はEclipseでした。IDEは実際に画像を表示することを拒否し、代わりに画像を表示するコンピューターの1つでエラーをスローしました(画像のサイズ変更などにかなりの時間がかかります)。

スレッド「AWT-EventQueue-0」の例外java.lang.OutOfMemoryError:Javaヒープスペース

エラーのもう1つの興味深い要素は、実行速度が遅いコンピューターでも、ペイント関数が呼び出されなくなるまでウィンドウのサイズを変更し、再度大きくして、「正しく」実行すると100で実行できることです。速度の%。

何が起こっているのかわからない、何かアイデアはありますか?

4

2 に答える 2

7

アプリのメモリが不足しています。正しく計算すると、その画像の容量は約280MBになります。

Javaプログラムには、使用できるメモリの最大量(ヒープスペース)があります。これは、JVMの起動時に固定され、この制限の設定方法は、JVMの実装とバージョンによって異なります。メモリが不足している場合や制限に近づいている場合、JVMはガベージコレクションに多くの時間を費やすため、ガベージコレクションの速度が大幅に低下します。

あなたがしなければならない唯一のことは、アプリにより多くのヒープスペースを与えることかもしれません。これは、-Xmxコマンドラインパラメーターを使用して実行されます。

于 2009-06-07T12:30:53.670 に答える
2

問題は、Java仮想マシンのヒープサイズにあります。をスローしたシステムには十分ではありませんOutOfMemoryError

Sun JVMを実行しているシステムで問題が発生している場合は、 SunのJVM固有のオプションを使用してJVMのヒープサイズを変更できます。

SunのJava6の時点では、ヒープサイズのデフォルト値はシステムメモリの量によって決定され-Xmsますが、最小ヒープサイズを変更し、最大ヒープサイズを変更するオプションによってオーバーライドすることもできます-Xmx。デフォルトでは、最小ヒープサイズは物理メモリの量の1/64で、最大は物理メモリの量の1/4です。

于 2009-06-07T12:25:59.920 に答える