背景情報
私はこのアプリを何ヶ月も構築しており、ほぼ完成しています。しかし、数日以来、次のようなログでメモリが増加しているのを見ています
D/dalvikvm(25624): GC_CONCURRENT freed 1782K, 17% free 22647K/27143K, paused 15ms+16ms, total 80ms
ご覧のとおり、大量のメモリが割り当てられています。そのため、数日間検索/読み取りを行い、MAT を使用してリークを見つけた後、アプリケーションを削除し、新しいプロジェクトでアクティビティごとに構築して、問題の原因を突き止めることにしました。
質問
現在、新しいプロジェクトがあり、アクティビティを 1 つだけ開いています。プロジェクトにいくつかの画像を追加しましたが、それらは使用されていません。アクティビティに関数を追加したので、ログで使用済みメモリを確認できます。
コード
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
Log.d("HOME", "START");
ShowMemoryStats("MAIN");
}
public void ShowMemoryStats(String activityName) {
Double allocated = new Double(Debug.getNativeHeapAllocatedSize())
/ new Double((1048576));
Double available = new Double(Debug.getNativeHeapSize()) / 1048576.0;
Double free = new Double(Debug.getNativeHeapFreeSize()) / 1048576.0;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(2);
Log.d("gettings", "debug. START ================================= "
+ activityName);
Log.d("gettings",
"debug.heap native: allocated " + df.format(allocated)
+ "MB of " + df.format(available) + "MB ("
+ df.format(free) + "MB free)");
Log.d("gettings",
"debug.memory: allocated: "
+ df.format(new Double(Runtime.getRuntime()
.totalMemory() / 1048576))
+ "MB of "
+ df.format(new Double(
Runtime.getRuntime().maxMemory() / 1048576))
+ "MB ("
+ df.format(new Double(Runtime.getRuntime()
.freeMemory() / 1048576)) + "MB free)");
Runtime rt = Runtime.getRuntime();
long maxMemory = rt.maxMemory();
Log.v("onCreate", "maxMemory:" + Long.toString(maxMemory));
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
int memoryClass = am.getMemoryClass();
Log.v("onCreate", "memoryClass:" + Integer.toString(memoryClass));
Log.d("gettings", "debug. END ================================= "
+ activityName);
}
結果
デバッグ。START =============================== MAIN debug.heap ネイティブ: 2,59MB のうち 2,41MB を割り当て (0 ,18MB 空き) debug.memory: 割り当て: 64,00MB のうち 12,00MB (0,00MB 空き) maxMemory:67108864 memoryClass:64 デバッグ。終了 ================================= メイン
だから今、私はこのメモリ使用量の原因を知りたいだけです. これは、すべてのアプリが起動時に取得するある種のデフォルト メモリですか?
助けてくれてありがとう。
更新 [2012 年 12 月 30 日]
まだこの問題に取り組んでいますが、問題ではないと思うことがあります。その理由は、AVD (ヒープサイズ: 24MB) を使用すると、まったく異なる結果が表示されるためです。
携帯電話 (Galaxy S3) でアプリをデバッグする場合と比較して: