myaskovsky00’s diary

備忘録とか

Android Java GC周りのまとめ。

  • Android JavaGCCMS(Concurrent Mark&Sweep)
  • JVMはAndroid5.0以前は Dalvik VM、5.0以降はARCがデフォルトで、GCアルゴリズムは共にCMSベース。
  • AndroidGCはオブジェクトをルートから辿って、辿りつかない場合は解放する。そのため循環参照になっていても上位のオブジェクトからの参照が切れていれば問題ない。
  • オブジェクトがライフサイクル内で閉じて入れば問題ないが、ライフサイクルを超えて利用される場合はいつまでも解放されない可能性が出て来るので注意する。その場合は弱参照を利用したり設計を見直す。
  • 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

Javaでは循環参照によるメモリリークは発生しない。 - Qiita

Android is Dead.: Javaでメモリリークする件