update.メモリ調査Androidアプリにおける性能測定の一環として、メモリ調査をすることがある。CPUの使用率だとパーセンテージでよくわかるんだけど、メモリ調査は指標が特殊なこともあって、ちょっととっつきにくい。参考まずは公式サイトを参照してみる。Usage|elinux.orgどれを使えばいいんだ..一般的な調査だとMAT(Eclipseに付属のもの)なんかを使ってみたり、adbで見てみたりすると思う。これがメモリ消費量だ!みたいなものが出てこない。だいたいのものがpssを出力してくれるんだけど、pssって一体何なんだってのがよくわからないまま進めるのは危険な気がしてくる。StackOverFlowPSSが何なのか、を知るためには結局他のRSSやUSSなどの算出方法を知っておく必要がある。件の記事では、それを非常にうまく説明してくれていた。以下に訳をおいておく。Androidのprocrankと呼ばれるツールがある。これはLinuxのプロセスのメモリ使用量を多いものから順に出力してくれる。USSの値をプロセス毎ごとに出力する。ここでは簡単のために、Byteではなく、「ページ」という単位を使うことにする。LowレベルのLinuxのシステムでは4096Byteを単位とするページがよく用いられる。VSS(psコマンドではVSZと表現される)はプロセスがアクセスできるアドレスの総和である。このサイズはプロセスがまだ使用していない領域もふくむ。mallocされて割り当てられたものの、まだ書き込まれていないようなメモリだ。したがって、VSSはプロセスの実メモリの使用量としては、あまり使われることはない。RSSはプロセスが実際に使用しているRAMの総メモリ量である。RSSは誤解を招くことがある。RSSはプロセスが使用しているものと、共有ライブラリが使用しているものを合計し算出するからだ。共有ライブラリは、それを使用するプロセス数とは関係なく、一度しか読み込まれないのにもかかわらず、だ。RSSはある単一のプロセスのメモリ使用量としては正しい表現とはいえないだろう。PSSは共有ライブラリを適切なサイズに分割し算出する点がRSSと異なっている。3つのプロセスがある30ページのメモリをもつ共有ライブラリを用いている場合、各プロセスのPSSには、10ページの使用量として計算される。PSSはとても扱いやすい数値だ。システム中の全てのプロセスのPSSを足しあわせた場合、それは実際のシステム中のメモリ使用量に相当するからだ。あるプロセスをキルした場合、各PSSに当分して計算されている共有ライブラリは、依然としてライブラリを用いている他の残っているプロセスの等分に分配される。この場合、PSSはわずかに誤解をまねく。プロセスをキルした場合にシステムに戻るメモリ量としてはPSSは正しい指標ではなくなってしまうからだ。USSはプロセスに完全に一意であるようなプライベートなメモリ使用量である。USSは動作中のプロセスが使っている真のコストを表しているため、かなり使いやすい数値である。プロセスがキルされた場合、USSで表されたメモリ量はシステムに還元される。そのため、USSはプロセスのメモリリークを疑った場合に最初に見る値としては最も使いやすい。本記事は僕の旧ブログからの転載です。ブログ閉鎖に伴い、こちらに色々記事を移していく予定です。最近はKotlinを使います。おうちではRubyやらJSやらいじってます。upLoginユーザーは見つかりませんでした。