次期版Android(開発コード:Android M)では、Android 5.0以降で大きな問題となっているメモリーリーク問題が大幅に解消される見込みだ。動的リンカーを改良して動的検査ツールを利用しやすくしたことなどにより、2015年7月下旬の時点で、既に130以上のメモリーリーク問題を修正している。

 2014年10月リリースのAndroid 5.0には、アプリケーションの標準ランタイム環境の刷新や、新デザインのUI採用といった大変更が加えられた。それに伴い、システムやアプリが徐々に主メモリー領域を食い潰す「メモリーリーク」が目立つようになった。メモリーリークによって空きメモリーが少なくなると、システム全体の実行速度が低下したり、アプリが勝手に再起動したりといった様々な問題が生じる。

図1●Android 5.1.1にも残るメモリーリーク問題
図1●Android 5.1.1にも残るメモリーリーク問題
AOSPのIssue Tracker(Issue 169747)で報告された画像を抜粋した。この例では、システムが約1.4Gバイトもの主メモリーを食い潰していることが分かる。
[画像のクリックで拡大表示]

 メモリーリークは、確保したメモリーをきちんと解放しないミスがプログラムに存在することで発生する。解消方法は、プログラムミスの修正だ。米グーグルは2015年7月時点までに、Android 5.0.1、5.0.2、5.1、5.1.1と4度にわたるアップデートを繰り返してきた。そのたびに問題を部分的に解消してきたものの、ユーザーからはAndroid 5.1.1でもまだメモリーリークが生じると報告されている(図1)。

リンカーを改良して検査を容易に

 2015年第3四半期にリリース予定の次期版Android(開発コード:Android M)では、プログラムとライブラリーを実行時にリンクする「動的リンカー」に改良が加えられる(図2)。この改良によってメモリーリーク問題の解消が進むことが期待できる。

図2●Android Mにおける動的リンカーの主な改良点
図2●Android Mにおける動的リンカーの主な改良点
(1)ライブラリーの探索順序を見直した、(2)ライブラリーのパスやsonameをきちんと取り扱えるようになった──の2点である。(1)によって「Address Sanitizer」のような動的検査ツールを利用しやすくなり、(2)によってリンクするライブラリーを厳密に区別できるようになった。
[画像のクリックで拡大表示]