約 0.1 MB の増加が予想されるときに、ネイティブ ヒープの使用量が 6 MB 増加します。
これらの数字にたどり着いた方法:
Log.d("test", "before setting layout");
showMemoryStats();
setContentView(R.layout.my_layout);
Log.d("test", "after setting layout");
showMemoryStats();
showMemoryStats の場所:
public static void showMemoryStats() {
Log.i("test", "----------------------------------------------------------------------------------------------------------------------------");
Log.i("test", "showing memory stats in xx");
double nativeUsage = Debug.getNativeHeapAllocatedSize();
Log.i("test", "nativeUsage: " + nativeUsage);
//current heap size
double heapSize = Runtime.getRuntime().totalMemory();
Log.i("test", "heapSize: " + heapSize);
//amount available in heap
double heapRemaining = Runtime.getRuntime().freeMemory();
Log.i("test", "heapRemaining: " + heapRemaining);
double memoryAvailable = Runtime.getRuntime().maxMemory() - (heapSize - heapRemaining) - nativeUsage;
Log.i("test", "memoryAvailable: " + memoryAvailable);
Log.i("test", "----------------------------------------------------------------------------------------------------------------------------");
}
出力:
07-03 16:50:40.127: D/test(18647): レイアウト設定前
07-03 16:50:40.127: 私/テスト (18647): ---------------------------------- -------------------------------------------------- --------------------------------------------
07-03 16:50:40.127: I/test(18647): xx でメモリ統計を表示しています
07-03 16:50:40.127: 私/テスト (18647): ネイティブ使用法: 5706008.0
07-03 16:50:40.127: 私/テスト (18647): ヒープサイズ: 4905968.0
07-03 16:50:40.127: 私/テスト (18647): heapRemaining: 1815456.0
07-03 16:50:40.127: 私/テスト (18647): memoryAvailable: 2.4757912E7
07-03 16:50:40.127: 私/テスト (18647): ---------------------------------- -------------------------------------------------- --------------------------------------------
07-03 16:50:40.348: D/dalvikvm(18647): GC_EXTERNAL_ALLOC が 100K を解放、49% が 2924K/5639K、外部 0K/0K、一時停止 45ms
07-03 16:50:40.518: D/dalvikvm(18647): GC_EXTERNAL_ALLOC は 9K を解放し、49% は 2917K/5639K を解放し、外部は 2700K/3371K を一時停止しました。
07-03 16:50:40.638: D/dalvikvm(18647): GC_EXTERNAL_ALLOC が 4K を解放、2928K/5639K が 49% 解放、外部 3952K/4356K、一時停止 51ms
07-03 16:50:40.698: D/dalvikvm(18647): GC_EXTERNAL_ALLOC は 2K を解放し、48% は 2933K/5639K を解放し、外部は 5963K/6027K を一時停止しました。
07-03 16:50:40.718: D/test(18647): レイアウト設定後
07-03 16:50:40.718: 私/テスト (18647): ---------------------------------- -------------------------------------------------- --------------------------------------------
07-03 16:50:40.718: I/test(18647): xx でメモリ統計を表示しています
07-03 16:50:40.718: 私/テスト (18647): ネイティブ使用法: 1.2101904E7
07-03 16:50:40.718: 私/テスト (18647): ヒープサイズ: 4734944.0
07-03 16:50:40.718: 私/テスト (18647): heapRemaining: 1716432.0
07-03 16:50:40.718: 私/テスト (18647): memoryAvailable: 1.8434016E7
07-03 16:50:40.718: 私/テスト (18647): ---------------------------------- -------------------------------------------------- --------------------------------------------
数学:
12101856 バイト - 5703424 バイト = 6398432 バイト = 6.10202 メガバイト
レイアウト ファイルを調べて、使用するすべてのドローアブルのサイズを追加したところ、合計サイズは 124 kb -> 0.121094 mb になりました。
では、一体何がネイティブ ヒープを 6 MB 増加させているのでしょうか。
誰かがそれを求めた場合、それが理にかなっているのかどうかわかりません... IDとドローアブルを含むレイアウトの束だけで、すでにドローアブルのサイズを確認しました。
事前にどうもありがとう...
編集:私の場合、これが解決策でした-応答とコメントを要約するために:「drawable」フォルダーに画像を保存し、hdpiデバイスを使用していました。解決策: 画像をフォルダー drawable-hdpi に入れます。理由: システムは、既に hdpi 解像度になっているにもかかわらず、hdpi 解像度に一致させるために、"drawable" からイメージを引き伸ばしていました。これにより、本来の 2 倍以上のメモリを占有していました。