メモリ
割り当てチャートと履歴付きのライブメモリ内訳(Free/Inactive/Active/Wired)。
概要
メモリツールは、デバイスのRAMがどのように割り当てられているか、どれだけすぐに回収可能か、そしてその内訳が時間とともにどのように変化するかを表示します。
実用的な質問に答えるために設計されています :
- 「このデバイスは今メモリプレッシャーを受けているか?」
- 「メモリはシステム(wired)、アプリ(active)、またはキャッシュ(inactive)によって保持されているか?」
- 「メモリ使用量は安定しているか、それとも急増しているか?」
Lirumでは、利用可能メモリはiOSが通常すぐに回収できるメモリ量を指します:Free + Inactive。
目次
タブ
- 概要
- 詳細
- 履歴
概要タブ
概要タブは利用可能メモリに焦点を当てています:
- 利用可能な割合を示す円形ゲージ。
- 利用可能量と総RAM。
- コンパクトな内訳表:Free、Inactive、Active、Wired。
「今デバイスは健全か?」を素早く確認したいときにこのビューを使います。 4行の内訳が合計と一致しない場合は、圧縮および「その他」を参照してください。
詳細タブ
詳細タブはより詳細な内訳を提供します:
- メモリ割り当てチャート(Active/Wired/Inactive/Free)。
- サイズと割合を示す詳細メモリ情報テーブル。
- 利用可能行はFree + Inactiveを合算。
どの種類のメモリが使われているか(回収可能かどうか)を理解するのに最適な場所です。 Free/Inactive/Active/Wiredの割合が100%に達しない場合は、圧縮または「その他」として現在計上されているメモリがある ためです。
履歴タブ
履歴タブは単一のスナップショットではなく傾向を理解するのに役立ちます:
- メモリ割り当て履歴:Free/Inactive/Active/Wiredの積み上げタイムライン。
- メモリ使用履歴:全体使用量の簡略化された時間変化。
履歴を使う場面:
- メモリリークや暴走ワークロード(使用量が徐々に増加)を疑うとき。
- スタッターやアプリの再読み込みとメモリプレッシャーを関連付けたいとき(使用量が急増してから減少)。
- Wiredメモリが増加し高止まりするか確認したいとき(多くはシステムやドライバのプレッシャー)。
メモリ状態
LirumはiOSが報告する高レベルのバケットを使用しています。これらはiOSメモリの最も有用な「メンタルモデル」カテゴリです:
| バケット | 通常の意味 | iOSはすぐに回収可能か? |
|---|---|---|
| Free | 未使用のRAM、割り当て準備済み | はい(すでに空き) |
| Inactive | 主にキャッシュや最近触れられていないページ | 多くの場合 |
| Active | 現在使用中の作業セット | 直接は不可 |
| Wired | 固定されページング不可のシステムメモリ | いいえ |
| Compressed | メモリ圧縮機構に格納されたページ | 直接は不可 |
| Other | 残りのバケット(OS/デバイスにより異なる) | 状況による |
利用可能(Free + Inactive)
利用可能は「どれだけ余裕があるか?」の実用的な指標です。
- Free:すでに未使用のページ。
- Inactive:主にキャッシュページで、他の 用途に再利用可能。
これがLirumが概要ゲージと詳細テーブルで利用可能 = Free + Inactiveを表示する理由です。
注意:利用可能はシステムが即座にその量のメモリをコストなしで提供する保証ではありません。Inactiveページの回収はキャッシュの破棄、ダーティページの書き戻し、キャッシュデータの再構築などの作業を伴います。
実際の意味:
- 利用可能が高く安定していれば、Freeが低くてもデバイスには余裕があります。
- 利用可能が常に低く(通常の作業中も低いまま)であれば、iOSは回収可能なキャッシュが少なく、圧縮やアプリ終了などの強いプレッシャーをかけ始めます。
- アプリ起動時の一時的な低下は正常です。回復しない緩やかな減少は典型的な「プレッシャー」パターンです。
Wired
Wiredメモリは固定され(ページング不可)、圧縮や要求時の回収ができないRAMです。
Wiredは「常駐し続けなければならない」メモリと考えてください。通常はカーネルや低レベルのシステムサービスが所有し、正確性やリアルタイム動作に必要です。
典型例:
- カーネルメモリとコアOSサービス
- ハードウェアドライバとDMAバッファ
- グラフィックス/ディスプレイサーフェスおよび一部GPU関連割り当て
- リアルタイムや正確性のために常駐が必要なメモリ
重要な理由:
- Wiredは最も柔軟性のないバケットです。増加するとiOSはRAM解放の選択肢が減り、メモリプレッシャーが早く発生します。
- Freeが低くても問題ない場合がありますが、Wiredが常に高いとiOSは対処が難しくなります。
一般的なパターン:
- カメラ使用時、AR、ゲーム、ビデオパイプライン、重いI/O、外部アクセサリ使用時にWiredが増加することがあります。
- Wiredは「粘着性」があり、一部の割り当てはすぐに減少せず、再起動後にのみリセットされることがあります。
- Wiredが時間とともに増加し減少しない場合、持続的なシステムレベルのプレッシャー(またはシステムサービスやドライバのリーク)を示すことがあります。
Active
Activeメモリはアプリやシステムによって現在使用中(頻繁に参照されている)RAMです。
Activeは単なる「アプリメモリ」ではありません。OSが現在ホットとみなすページすべてを含みます。ファイルバックページ(コードやフレームワークなど)や匿名ページ(ヒープやスタックなど)も含まれます。
典型例:
- アプリのヒープや作業セット
- 使用中のファイルキャッシュやデコード済みメディア
- システムやアプリが積極的に触れているデータ構造
重要な理由:
- Activeメモリは「無駄」ではなく作業用メモリです。通常、行っている作業 に応じて変動します。
- iOSはActiveページを単純に「解放」できません。プレッシャー時はまずキャッシュから回収し、それが不十分なら圧縮し、最終的にアプリを終了させることがあります。
一般的なパターン:
- アプリを開いたり作業するとActiveは増加し、アプリ終了やページがInactiveになると減少します。
- ワークロードが変わらないのにActiveが増え続ける場合、メモリリークやアプリ内の暴走キャッシュの可能性があります。
Inactive
Inactiveメモリは最近使用され、現在は主にキャッシュとして保持されているRAMです。
InactiveはiOSが「高速回収」できる余裕の大部分を占めます。多くはクリーンなファイルキャッシュで、必要に応じて破棄・再構築可能です。
典型例:
- キャッシュされたファイルページ
- 再利用可能な最近使用されたアプリメモリ
- 積極的に参照されていないが再利用される可能性のあるデータ
重要な理由:
- 新しい割り当てにRAMが必要なとき、iOSはまずInactiveから回収します。
- 高いInactiveは通常問題なく、iOSがRAMを効率的にキャッシュとして使っていることを示します。
一般的なパターン:
- アプリ起動後、ファイル読み込み、メディアスクロール、ウェブコンテンツ読み込み後にInactiveが増加します(これらのページがキャッシュになる ため)。
- メモリプレッシャー時は、iOSがキャッシュページを再利用するためInactiveが減少します。
- すでにInactiveが低く利用可能も低い場合、iOSは回収しやすいメモリが少なく、早期にプレッシャーが発生します。
Free
Freeメモリは現在未割り当てで使用可能なRAMです。
iOSではFreeは設計上低めに保たれることが多いです。OSはRAMをキャッシュとして活用し、次のアプリ起動やスクロール、ファイル読み込みを高速化しようとします。
重要な理由:
- 健全なデバイスでもFreeは小さい傾向があります。iOSは未使用のままにするよりキャッシュ(Inactive)としてRAMを活用することを好みます。
- Freeが低くてもInactiveが十分でプレッシャーがなければ問題ありません。
圧縮および「その他」(数値が合わない理由)
アプリでは、iOSは圧縮メモリや4つの主要ページリストにきれいに分類されないその他のシステム割り当ても報告します。
圧縮メモリは、iOSがページを圧縮形式で格納しているRAMです。これはiOSの主要なプレッシャー緩和機構の一つで す:
- 圧縮はRAMを節約しますが、圧縮・解凍にCPUも使用します。
- 圧縮メモリの増加は、システムがアプリ終了を避けるためにより努力しているサインです。
- 圧縮ページに再アクセスすると、iOSは解凍しなければならず、遅延やCPU負荷が増加します。
その他は4つの主要バケットに含まれない残りのメモリです。OSバージョンやデバイスによって異なるシステム割り当てやVM会計カテゴリが含まれます。
Lirumでは:
- 概要の内訳と詳細チャートは、最も一般的に解釈される4つの状態:Free、Inactive、Active、Wiredに焦点を当てています。
- 表示される合計メモリはデバイスの物理RAMです。
そのため、4行の内訳がすべてのデバイスやOSバージョンで合計と完全に一致しないことがあります。差分は通常、圧縮メモリやその他のシステム割り当てです。
iOSがプレッシャー時に行うこと
RAMが逼迫すると、iOSは段階的にプレッシャーをかけます:
- まずキャッシュを回収:Freeページを再利用し、次にInactiveキャッシュを回収(クリーンなファイルキャッシュの破棄、一部キャッシュの削除)。
- メモリを圧縮:使用頻度の低いページを圧縮形式で保存し、アプリ終了を 遅らせる。
- アプリを終了:プレッシャーが続くと、バックグラウンドアプリ(最終的にはフォアグラウンドアプリも)を終了してメモリを解放。これにより、アプリ切り替え時の再読み込みが発生することがあります。
メモリツールは、これらの段階が時間経過でどのように進行するかを履歴タブで観察すると最も役立ちます。
数値の解釈方法
- **利用可能(Free + Inactive)**は最も迅速な「余裕」指標です。
- Wiredは最も扱いにくいバケットです。Wiredが増えるとシステムの調整余地が減ります。
- Inactiveが大きいのは通常正常で良好(キャッシュ)。システムがメモリを必要とすると減少します。
- Active + Wiredが増加し利用可能が減少すると、アプリの再読み込み、スタッター、システムプレッシャーが発生する可能性があります。
- 傾向を考えるには履歴タブを使います。iOSはRAMを積極的にキャッシュに使うため、単一スナップショットは誤解を招きやすいです。
- 何度も繰り返す操作中に利用可能が徐々に減少するのは、単一の数値よりも問題の強い指標です。