Abyte
とaboolean
はそれぞれ1バイトです。それらの配列がある場合は、「1バイト配列」があります。
ByteBuffer
たとえば、それらの1つを内部的に保持する必要があります。
合計614個あり、最小のものはbyte[24]
(またはboolean[24]
)、最大のものは3MBです。それらすべてを合わせて104MBを使用します。
それらが参照されなくなった場合、GCはそれらを取り除きます。
例えばあなたが置くとき
private static byte myArray[] = new byte[3 * 1024 * 1024];
クラスの1つで、null()に戻さないでくださいmyArray = null
。別のオブジェクトがそれを参照しているため、このクラスをガベージコレクションすることはできません。オブジェクトはクラス自体になります(のようにString.class
)。クラスがアンロードされることはないため、クラスオブジェクトをガベージコレクションすることはできません。(それらは、ClassLoader
それ自体が別のオブジェクトによって参照/ロードされる可能性があるそれらによって参照され、ClassLoader
オブジェクトを作成してそれらなしでクラスを使用することはできません-それらはとどまる必要があり、それらのクラスへの参照を保持する必要があります)
static
通常はそれほど単純ではありませんが、多くの場合、どこかから始まります。
MAT内で(GCを強制した後)、存続することを意図していないオブジェクトの参照チェーンを調べ、参照を保持している1つのオブジェクトを特定します。これをコードで設定するnull
と、リークはなくなります。ここでより詳細に説明されています:
http://android-developers.blogspot.de/2011/03/memory-analysis-for-android.html