メモリ解放の話
最近は小さいデバイスでもマルチタスクで、
沢山のアプリを走らせればその分メモリも喰うわけで。
不要不急のアプリはとりあえず落としましょう。
…といったところで、
バックグラウンドで細々と動き続ける系のアプリも沢山。
ホントは、
ちゃんと行儀の良いメモリ管理をしているアプリを世に出すように心がけることのほうが重要なんですけどね〜…
アプリケーションってのはプログラムとデータに分けられて、
プログラムはコアとライブラリに更に分けられて。
ずっとメモリ上に居なきゃ行けないのはコアだけで、
ライブラリは必要に応じて展開されたり片付けられたり。
使用中はメモリ上に居なきゃいけないけれど、
使ってない時は一旦消してしまうか、
再使用時の展開オーバーヘッドを懸念してそのまま置いとくか。
データに関しては、
毎度毎度ストレージ直接アクセスではコストもかかりますから
編集中とか参照を繰り返すモノとかはメモリに展開しておきたいけれど
編集終わったモノとかはどんどん片付けていかなきゃいけない。
それを踏まえてざっくり分類してみると、
・一部でも消されたら再起動必須なモノ
・消されたらリロードコストがかかるモノ
・もう使わないので消され待ちのモノ
3番目を大量にまき散らしてるのはゴミ屋敷タイプなので、論外。
1番目をうっかり消してしまう類のバグはよろしくない。
さてさて。
バックグラウンドに回されてる間に2番目をどの程度保持しているか。
GUI系OSのパソコンのようにフォーカスされていない窓でも並行して動作している類であればメモリ上から待避させてしまうわけにもいかないけれど、
スマホのように全画面前提であればバックグラウンドで継続できる処理はかなり限定されるわけで、フォアグラウンドに戻すときのコストが多少掛かったとしても出来る限り待避させてメモリを空けておくほうが行儀が良いのではないでしょうか。
まぁそういうお行儀の良いアプリばかりなら良いのですが、
世の中そう行儀の良いアプリばかりでもないわけで。
でも普通であれば、フォアグラウンド側からメモリ供出シグナルが出されたら、
バックグラウンドからフォアグラウンドに戻るときに多少リロードコストがかかろうともメモリ領域は得られるハズなんですね。
じゃないと、フォアグラウンド側でメモリ不足を起こして、使い勝手的にサイテーなことになるわけですから。
じゃあ…メモリ解放アプリって何ぞ?
答えは簡単。
メモリ供出シグナルを限界まで繰り返し発行するんです。
各アプリが「もー無理!」って言った結果メモリ解放アプリがメモリ確保に失敗したら、確保した全メモリを解放して終了。
…ってねずみ小僧か!
だったらバックグラウンドに回して一時お休み中のアプリを明示的に一旦切ってしまったほうがわかりやすいですね(笑)
…火付け盗賊改め方、みたいなもん?
だいたい、
バックグラウンドでメモリ供出させられてからフォアグラウンドに戻ってきた時に弱参照破損で動かないアプリとかも意外と多いんですから…
コメントを残す