Android Java GC周りのまとめ。
- Android JavaのGCはCMS(Concurrent Mark&Sweep)
- JVMはAndroid5.0以前は Dalvik VM、5.0以降はARCがデフォルトで、GCアルゴリズムは共にCMSベース。
- AndroidのGCはオブジェクトをルートから辿って、辿りつかない場合は解放する。そのため循環参照になっていても上位のオブジェクトからの参照が切れていれば問題ない。
- オブジェクトがライフサイクル内で閉じて入れば問題ないが、ライフサイクルを超えて利用される場合はいつまでも解放されない可能性が出て来るので注意する。その場合は弱参照を利用したり設計を見直す。
- GCを助けるために不要になったオブジェクトはなるべくnullクリアしておく。
参考サイト
メモリーモニター -Android Studio ドキュメント 日本語訳
第2回 ヒープが再利用される仕組みを理解する:Javaはどのように動くのか~図解でわかるJVMの仕組み|gihyo.jp … 技術評論社
不要になった変数に NULL を代入する (Sun Java System Application Server Enterprise Edition 8.2 パフォーマンスチューニングガイド)
Memory Profiler を使用して Java ヒープとメモリ割り当てを表示する | Android Studio
Java/AndroidとJVM + Heap + Gabage Collectionのお話 - Qiita