記憶體不足終止工具

Android 平台執行時會將未使用的記憶體視為浪費的記憶體,Android 會持續設法用掉所有可用的記憶體。舉例來說,系統會在應用程式關閉後將其留在記憶體內,方便使用者快速切換回這些應用程式。因此,Android 裝置在執行時,通常不會發生大量記憶體未用到的情況 (請參閱「Android 記憶體分配」一文)。

Android 記憶體不足終止工具 (LMK) 服務程序會監控執行中的 Android 系統記憶體狀態,並在記憶體壓力過高時終止最不重要的程序,以維持系統效能。

LMK 守護程序會使用稱做 oom_adj_score 的「記憶體不足」分數,為執行中的程序排出優先順序。系統會優先終止分數較高的程序。背景應用程式會先終止,系統程序則會最後終止。下表由高到低列出 LMK 的分數類別。屬於第一列最高分類別的項目會最先遭到終止:

Android 程序的排名,由最高分到最低分依序為:背景應用程式、先前的應用程式、主畫面應用程式、服務、可感知的應用程式、前景應用程式、持續性、系統和原生。
圖 1. Android 程序,頂端為最高分,而底部為最低分。

Android Vitals 的 LMK 指標

Android Vitals 可協助您監控及改善應用程式的 LMK 發生率。Android 生命徵象只會評估一項 LMK 事件發生率:使用者感知 LMK 事件發生率

此指標反映感知到發生至少一次 LMK 事件的每日活躍使用者人數百分比。使用者感知 LMK 是指使用者可能注意到的 LMK 情形,例如應用程式在顯示活動或做為前景服務執行時發生的 LMK。

您可以在 Android Vitals 的「Stability」專區下方找到這項指標:

圖 2. 在 Android Vitals 中存取使用者感知 LMK 事件發生率

如同其他核心重要指標 (例如 ANR 和當機),您可以篩選指標、比較自己的指標與同類應用程式,或監控指標的長期變化 (最多 3 年)。自 2025 年 1 月 28 日起,現有應用程式可使用這項資料。

圖 3 Android Vitals 中的 LMK 率總覽。

記憶體剖析工具

以下工具可協助您找出及診斷記憶體問題:

  • 瞭解應用程式配置記憶體的變化趨勢。您可以找到即時圖表,瞭解應用程式目前的記憶體用量、已配置的 Java 物件數量,以及進行垃圾收集的時間點。
  • 在應用程式執行期間,啟動垃圾收集事件並提供 Java 堆積的數據匯報。
  • 記錄應用程式的記憶體配置、檢查所有已配置的物件,並查看每個配置的堆疊追蹤。

Android Studio 記憶體分析器

Android Studio 提供 記憶體分析器,做為 Android 分析器的元件,可協助您找出可能導致延遲、沒有回應、甚至應用程式異常終止的記憶體流失情形。分析器會顯示應用程式記憶體用量的即時圖表,並可讓您擷取記憶體快照資料、強制執行垃圾收集,以及追蹤記憶體配置。

圖 4. 在 Android Studio 記憶體分析器中查看全域 JNI 參照。

Unity 記憶體剖析工具

如果您使用 Unity Engine 建構應用程式,可以按照 Unity 記憶體分析指南操作。Unity 提供兩種工具,可分析 Unity 應用程式的記憶體用量。

第一個是記憶體分析器模組,這是內建的分析器,可提供應用程式使用記憶體位置的基本資訊。

記憶體模組會顯示紋理記憶體和網格記憶體等記憶體配置。
圖 5. 選取「Memory」模組的 Unity Profiler 視窗。

第二個工具是記憶體分析器套件,這是可新增至專案的 Unity 套件。這個套件會在 Unity 編輯器中新增額外的記憶體分析器視窗。記憶體分析器可讓您更詳細地分析應用程式的記憶體用量。您可以儲存及比較快照,找出記憶體外洩或查看記憶體版面配置,找出記憶體碎裂問題。

圖 6. 使用記憶體分析器視窗分析記憶體快照。

Unreal Memory Insights

使用 Unreal Engine 建構的應用程式可使用 Unreal Memory Insights 查看記憶體配置和取消配置的詳細資訊,包括與記憶體區塊相關聯的低階記憶體 (LLM) 標記和呼叫堆疊。

記憶體深入分析查詢系統可在任何時間點找出即時分配情形、識別記憶體用量的變化、找出記憶體流失情形,以及區分短期和長期分配。

從 UE 5.4 開始,Memory Insights 支援使用呼叫堆疊追蹤 Android 專案的記憶體。

記憶體深入分析追蹤器顯示主要記憶體圖表、即時配置計數,以及分配/釋放事件計數。
圖 6. Unreal 的 Memory Insights 追蹤器。

其他資源