AndroidスタジオメモリプロファイラはOthers
カテゴリの割り当てを報告します。 https://developer.android.com/studio/profile/memory-profiler.htmlによるとAndroidで `不明 '(` Other`)のメモリリーク?
:その他:システムは分類する方法がわからない、あなたのアプリが使用するメモリ。
我々は深く掘る場合は、同様のメモリフットプリント情報がhttps://developer.android.com/reference/android/os/Debug.MemoryInfo.html#getMemoryStat(java.lang.String)
を使用して、実行時に取得することができますこれは、Android StudioのメモリプロファイラでOthers
のように見えますがDebug.MemoryInfo
クラスにsummary.private-other
に対応しています。そのパラメータは次のように報告されます:
public int getSummaryPrivateOther() {
return getTotalPrivateClean()
+ getTotalPrivateDirty()
- getSummaryJavaHeap()
- getSummaryNativeHeap()
- getSummaryCode()
- getSummaryStack()
- getSummaryGraphics();
}
どのカテゴリのメモリ割り当てがそのカテゴリになりますか?明らかにJava、Native、Code、Stack、Graphicsではありません。
私のアプリ(コードベースが非常に大きいので、それを引き起こす特定のコードをピンポイントできない)は、多くのメモリを消費しますが、そのような消費につながる特定のソース/パターンはありますか?
編集1 私は部分的に自分の質問最初の部分に答えることができました:
メモリ割り当ての種類は、そのカテゴリで終わりますか?明らかにJava、ネイティブ、コード、スタック、グラフィックスではない です。
RAM情報もadb shell dumpsys meminfo <your proc name>
を使用して取得すると、通常のように見えることができます実験
、私はUnknown
が最も可能性の高いPrivate Other
に含まれていることがわかります。次の質問を提起する:Unknown
とは何ですか? https://developer.android.com/studio/command-line/dumpsys.html#meminfoによると:
システムは 他のより具体的な項目の一つに分類することができませんでした任意のRAMページ。現在、これにはほとんどがネイティブの 割り当てが含まれています。これは、アドレス空間レイアウトのランダム化(ASLR)によって このデータを収集するときにツールで識別できません。 Dalvikヒープと同様に、UnknownのPss Totalは Zygoteとのアカウント共有を考慮しており、Private Dirtyはあなたのアプリ専用です。
それはまだネイティブ割り当てのようです。識別可能なネイティブ割り当てはNative
カテゴリになりますが、ASLRによってデータが識別できなくなったネイティブ割り当ては、Unknown
になります。
主な問題は、しかし、まだ保持している:
私のアプリ(非常に大規模なコードベースでは、私は本当にピンポイント それを引き起こし、特定のコードすることはできません)
Other
メモリを大量に消費するが、 ある場合そのような消費に結びつくあるソース/パターンがありますか?Javascript
を有効にしてWebView
:私は、このようなぶら下がっスレッド、オープン・カーソル、webviewsと研究の多くの時間後など
おかげで、それは興味深い発見です! – azizbekian