BufferedImageに非常に大きなイメージファイルを作成する、奇妙な問題は、コンパイルして、コンピュータに応じて、

StackOverflow https://stackoverflow.com/questions/961795

質問

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

のBufferedImage BI =新しいBufferedImageの(58240、1664、BufferedImage.TYPE_INT_RGB);

、明らかに画像が非常に大きいます。

今、私がいる問題は、他の人に本当にゆっくりと、しかし、一部のコンピュータで罰金100%動作するように思われることである(となしこれはスペックとは何の関係もありません)。

私の最も大きな進展は、Eclipseに来て、IDEは、実際に画像を表示することを拒否し、代わりに(画像などのサイズを変更するにはかなりの時間がかかります)本当にゆっくりと画像を表示するコンピューターのいずれかでエラーを投げました:

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

は、エラーのもう一つの興味深い要素も、コンピュータ上で、それは私はそれが中だペイント機能がもはや呼び出されるまで、再びそれを大きくしないと、それを私はそれを行う場合は「正しい」ウィンドウのサイズを変更することができます上で実行速度が遅いということですスピードの100%で実行されます。

任意のアイデア、全く何が起こっているのかわからない?

役に立ちましたか?

解決

あなたのアプリは、メモリが不足している - 私はそれを正しく計算した場合、その画像は280メガバイト程度かかります。

Javaプログラムは、それらがJVMの起動時に固定されている(ヒープ領域)を、使用することを許可されているメモリの最大容量を持ち、どのようにこの制限が設定されていることは、JVMの実装とバージョンの間で変動します。あなたはメモリや限界に近いが不足している場合は、JVMがそれをかなり遅くなる、ガベージコレクションをやって多くの時間を過ごすことになります。

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

他のヒント

問題は、Java仮想マシンのヒープサイズである - 。ちょうどOutOfMemoryErrorを投げたシステムでは足りない。

問題は、Sun JVMを実行しているシステムで発生している場合は、

は、<のhref = "http://java.sun.com/j2se/1.5.0/docsを使用することにより、JVMのヒープサイズを変更することが可能です/tooldocs/windows/java.html#options」のrel = "nofollowをnoreferrer"> SunのJVM固有のオプションを。

SunのJava 6のよう、ヒープ・サイズのデフォルト値はシステムメモリの量によって決定されるだけでなく、最大ヒープサイズを変更-Xms最小ヒープ・サイズを変更するオプション、および-Xmxによってオーバーライドすることができるされています。デフォルトでは最小のヒープサイズは、物理メモリの量は1/64であり、最大値は、物理メモリの量の1/4である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top