2

重複の可能性:
Java ガベージ コレクション

メモリを取り戻すには、処理が終了した後、C、C++ でオブジェクトを解放する必要があることを知っています。ただし、JavaとAndroidでオブジェクトを解放する方法がわかりません。nullオブジェクトに割り当てるだけで十分ですか?

4

5 に答える 5

4

Java では、オブジェクトを解放する必要はありません。

Java には組み込みのガベージ コレクターがあり、必要なときに実行され、使用されなくなったすべてのリソースを消去してメモリを解放します。Java 開発者は Java ランタイムを呼び出して Garbage Collector を実行するSystem.gc();場合がありますが、これはランタイムへの単なる提案であり、常に実行されるとは限りません。

リーダーと画像を使用している場合は、必要に応じて必ず電話.recycle().close()てください。

于 2012-12-24T03:31:55.550 に答える
3

特に単純な Java オブジェクト (モデル オブジェクトなど) は、他のオブジェクトがそれを参照していない場合、ガベージコレクターによって解放できます。

Bitmapもし私があなただったら、解放しなければならないオブジェクトがいくつかあるので、そのガベージコレクターをあまり信用しないでください。

BitmapAndroid アプリでより多くの RAM を消費します。

Bitmap b = createLargeBitmap();
Bitmap b2 = b;

そのオブジェクトへのすべての参照を削除し、ガベージ コレクターにそれを強制終了させる場合

b = null;
b2 = null;

メモリ リークまたはOutOfMemoryエラーが発生する可能性があります。

recycle()そのため、ビットマップを完全に解放するために呼び出す必要があります。

b.recycle();
b = null;
b2 = null;

// 間違った文法でごめんなさい :)

于 2012-12-24T03:49:48.220 に答える
2

ほとんどの場合、var を null に設定するだけで十分です。あなたの質問に答えるより良い答えは、この投稿で詳細が説明されているメモリをリークする方法です。

于 2012-12-24T03:31:43.403 に答える
1

メモリの割り当て解除は、Java ガベージ コレクタによって自動的に行われます。コードを使用してガベージ コレクターに強制的にメモリを解放させることはできません。

呼び出しは、System.gc()ガベージ コレクターがRUN および FREEメモリを保証するわけではなく、最終的な決定は Java ランタイムによって行われます。

于 2012-12-24T03:32:03.857 に答える
0

Android (Java 言語を使用) はガベージ コレクション環境です。つまり、参照がなくなったオブジェクトは仮想マシンによって自動的に削除されます。

したがって、質問する必要があるのは、プログラムがメモリを使いすぎないようにするにはどうすればよいかということです。これは通常、メモリ内データ構造にあまり多くのオブジェクトを置かないようにすること、ファイル システムなどに情報を永続化することによって実現されます。

于 2012-12-24T03:49:49.250 に答える