前編では、/proc/meminfoの内容を元にアンドロイドで利用できるメモリ量の求め方を考察した。後編では、動作している各アプリのメモリ利用量の取得方法と、そこから利用可能メモリ量を推察してみたい。
アンドロイドアプリの起動はzygote(DVMのデーモン)が実行する。zygoteから起動(fork)された各アプリが必要なメモリを占有するが、共通部分まで、アプリごとに占有してしまうとあっという間にメモリが不足してしまう。
そこで、COW(Copy On Write)と呼ばれる手法で、起動時はzygoteとメモリ空間を共有している(shared)。その後、必要になれば、アプリ専用のメモリ(private)に置き換わる。
それに加えて、各アプリ内では、必要のなくなったメモリを回収するガベージコレクションを実行し、空きメモリを確保しようとする。できるだけメモリを効率よく扱うために、非常に複雑なメモリ管理が行われている。