Androidのメモリ効率化Tips "ArrayMap"
はじめに
Google公式のAndroid Performance Patternの内容をまとめてみました。
AndroidのPerformanceを良くするためのTipsが公開されているのですが、英語で記載されており日本語でまとめたものがないので、簡単にまとめてみました。詳細は追記していきます。
ArrayMapとは
ドキュメントによると
ArrayMapとは、Mapクラスの一つでHashMapのメモリパフォーマンスをより効率化したクラス
である。
通常のHashMapはインスタンスを生成した際に利用しないメモリまでallocate(割り当て)してしまう。androidにおいて、メモリパフォーマンス的によくない。そこでAPI Level19よりAndroid用に新しく追加されたのがArrayMap。以下のようなヒエラルキーになっている。
ArrayMapsの利用シチュエーション
item数が少ない状態で、HashMapを使いたい場合
- mapのitem数が少ない1000以下の場合
- mapの内部にmap(submap)を持ち、submapを頻繁にイテレートする場合
ArrayMapの仕組み
- HashMapと大きく違う点が、要素を追加した際に順番を保持していること。任意のkeyでアクセスする際には、まず二分探索でhashのorderを特定し(下図左)その後に、Collection(keyとvalueのobjectが交互に織り合わさって構成されている(右側))に効率よくアクセスする。
メモリ効率化
- 図のようにArrayMapはインスタンスを生成してもHashMapのように利用しないメモリを占拠しない。
ArrayMapの追加と削除
上記のようにメモリの効率化が行われているが、もちろんデメリットもある。必要なメモリしか利用しないのでその分のコストはかかる。なので、前述しているが、ArrayMapは要素数が少ないときのみ利用するようにする。
削除 -> 要素の削除とその配列をコピーしてメモリを必要な分のみの大きさを割り当てて再度移し替える。
追加 -> 要素の追加とその配列をコピーしてメモリを必要な分のみの大きさを割り当てて再度移し替える。
orderの利用
- ArrayMapはHashMapとは違い、要素のorderを保持しているのでHashMapのようにIteratorでのループだけでなく、indexでのloopが可能
Author And Source
この問題について(Androidのメモリ効率化Tips "ArrayMap"), 我々は、より多くの情報をここで見つけました https://qiita.com/neonankiti/items/a788588f00da88f093c7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .