重複の可能性:
Java ガベージ コレクション
メモリを取り戻すには、処理が終了した後、C、C++ でオブジェクトを解放する必要があることを知っています。ただし、JavaとAndroidでオブジェクトを解放する方法がわかりません。null
オブジェクトに割り当てるだけで十分ですか?
重複の可能性:
Java ガベージ コレクション
メモリを取り戻すには、処理が終了した後、C、C++ でオブジェクトを解放する必要があることを知っています。ただし、JavaとAndroidでオブジェクトを解放する方法がわかりません。null
オブジェクトに割り当てるだけで十分ですか?
Java では、オブジェクトを解放する必要はありません。
Java には組み込みのガベージ コレクターがあり、必要なときに実行され、使用されなくなったすべてのリソースを消去してメモリを解放します。Java 開発者は Java ランタイムを呼び出して Garbage Collector を実行するSystem.gc();
場合がありますが、これはランタイムへの単なる提案であり、常に実行されるとは限りません。
リーダーと画像を使用している場合は、必要に応じて必ず電話.recycle()
し.close()
てください。
特に単純な Java オブジェクト (モデル オブジェクトなど) は、他のオブジェクトがそれを参照していない場合、ガベージコレクターによって解放できます。
Bitmap
もし私があなただったら、解放しなければならないオブジェクトがいくつかあるので、そのガベージコレクターをあまり信用しないでください。
Bitmap
Android アプリでより多くの RAM を消費します。
Bitmap b = createLargeBitmap();
Bitmap b2 = b;
そのオブジェクトへのすべての参照を削除し、ガベージ コレクターにそれを強制終了させる場合
b = null;
b2 = null;
メモリ リークまたはOutOfMemory
エラーが発生する可能性があります。
recycle()
そのため、ビットマップを完全に解放するために呼び出す必要があります。
b.recycle();
b = null;
b2 = null;
// 間違った文法でごめんなさい :)
ほとんどの場合、var を null に設定するだけで十分です。あなたの質問に答えるより良い答えは、この投稿で詳細が説明されているメモリをリークする方法です。
メモリの割り当て解除は、Java ガベージ コレクタによって自動的に行われます。コードを使用してガベージ コレクターに強制的にメモリを解放させることはできません。
呼び出しは、System.gc()
ガベージ コレクターがRUN および FREEメモリを保証するわけではなく、最終的な決定は Java ランタイムによって行われます。
Android (Java 言語を使用) はガベージ コレクション環境です。つまり、参照がなくなったオブジェクトは仮想マシンによって自動的に削除されます。
したがって、質問する必要があるのは、プログラムがメモリを使いすぎないようにするにはどうすればよいかということです。これは通常、メモリ内データ構造にあまり多くのオブジェクトを置かないようにすること、ファイル システムなどに情報を永続化することによって実現されます。