1

プログラム/パッケージへのリンクごとに5つのボタンを含む1つのメインクラスがあります。各パッケージは、ウェブカメラから画像をキャプチャする jmf プログラムを実行し、ファイルから約 15 枚の画像を読み込みます。

ロードする最初のプログラムは(どのボタンを押しても)常に正しく実行されます。しかし、最初のプログラムが終了した後にプログラムを実行すると、java.lang.OutOfMemoryError: java heap spaceが発生します。

Javaがすべての画像を処理できないのか、それともjmf画像キャプチャと関係があるのか​​ どうかはわかりません.

4

6 に答える 6

3

たぶん、JVMにより多くのメモリを与える必要があります(コマンドラインの-Xmx512mが良いスタートかもしれません)、

次に、問題が解決した場合は、プログラムが大量のメモリを消費する理由を調査します。

jvisualvmのような太陽診断ツールの使用が役立つ可能性があります。

于 2010-01-07T16:04:10.663 に答える
2

Javaの最大メモリーを増やして、再実行してください。それでもOOMが表示される場合は、リークが発生している可能性があります。最大メモリを増やすには-Xmx<new heap size>m、コマンドラインに追加します。

例:

java -Xmx1024m Foo
于 2010-01-07T16:05:10.707 に答える
1

JVMにどのくらいのメモリを与えていますか?以下を使用してさらに与えることができます: -Xmx1024m(1GBの場合、必要に応じて調整します)

これは、プログラムにメモリリークがないことを前提としています。JMFについては何も知りません。これは、メモリ不足エラーに関する一般的なアドバイスです。

于 2010-01-07T16:03:44.937 に答える
0

JVM は、使用可能な最大メモリ量が制限された状態で実行されます。これは少し直感に反しており、多くの人をつまずかせます (似たような環境はあまり思い浮かびません)。

指定することで、JVM が使用する最大メモリを増やすことができます。

java -Xmx128m ...

または類似。その量のメモリを消費することが事前にわかっている場合は、

java -Xms128m ...

JVM が起動時に割り当てるメモリを指定します。-Xms対に注意してください-Xmx

于 2010-01-07T16:09:28.453 に答える
0

最初のパッケージ/プログラムがガベージコレクションされるのを妨げる参照がまだいくつかあるかどうかを確認してください。

最初のプログラムが終了したことをランチャーが検出したら、最初のプログラムへのすべての参照を設定し、場合によってはそこから取得したオブジェクトを NULL に設定して、JVM が再びメモリを回収し、2 回目の起動に備えることができるようにします。

于 2010-01-07T16:10:24.970 に答える
0

Java は、デフォルトで 64 MB のヒープ領域を使用します。他の提案 (ヒープ・スペースを 512M または 1024M に増やす) に代わる方法は、コントローラーと 5 つのアプリケーション用に別々の JVM を開始することです。次に、JMF アプリケーションの 1 つが (メモリー不足が原因で) クラッシュしても、コントローラーと他のアプリは引き続き実行されます。

(これは、アプリケーションとコントローラーが完全に切り離されている場合にのみ機能します。そうでない場合は、ヒープ サイズを増やし、不要になったらすぐにすべてのメディアを破棄して、メモリ リークを防ぎます)

于 2010-01-07T16:14:28.377 に答える