Android 平台執行時會將未使用的記憶體視為浪費的記憶體,Android 會持續設法用掉所有可用的記憶體。舉例來說,系統會在應用程式關閉後將其留在記憶體內,方便使用者快速切換回這些應用程式。因此,Android 裝置在執行時,通常不會發生大量記憶體未用到的情況 (請參閱這裡的 Android 記憶體配置)。
Android 記憶體不足終止工具 (LMK) Daemon 程序會監控執行中 Android 系統的記憶體狀態,並在記憶體壓力過高時,終止最不重要的程序,確保系統效能維持在可接受的程度。
LMK 精靈會使用稱做 out of memory 的「記憶體不足」分數 (即 oom_adj_score) 為執行中的程序排出優先順序,藉此決定要終止哪些程序。系統會優先終止分數較高的程序。背景應用程式的終止順位最高,系統程序的順位最低。下表由高到低列出 LMK 的分數類別。屬於第一列最高分類別的項目會最先遭到終止:

記憶體用量分析工具
下列工具提供以下幾種方法,可幫助您找出及診斷記憶體問題:
- 瞭解應用程式配置記憶體的變化趨勢。您可以查看應用程式記憶體用量的即時圖表、已配置的 Java 物件數量,以及進行垃圾回收的時間點。
- 在應用程式執行期間,啟動垃圾收集事件並提供 Java 堆積的數據匯報。
- 記錄應用程式的記憶體配置、檢查所有配置的物件,並檢視每個配置的堆疊追蹤。
如果遊戲是在原生引擎上執行,請使用 HWAddress Sanitizer 偵錯原生記憶體配置。
Android Studio 記憶體分析器
Android Studio 提供記憶體分析器做為 Android 分析器的元件,可協助您找出可能導致延遲、沒有回應、甚至應用程式異常終止的記憶體流失和記憶體抖動情形。分析器會顯示應用程式記憶體用量的即時圖表,並可讓您擷取記憶體快照資料、強制執行垃圾回收,以及追蹤記憶體配置。

Unity 記憶體剖析工具
如果您使用 Unity 引擎建構應用程式,可以參考 Unity 記憶體剖析指南。Unity 提供兩種工具,可分析 Unity 應用程式的記憶體用量。
第一個是記憶體分析器模組,這項內建分析器可提供應用程式記憶體用量的基本資訊。
第二項工具是 記憶體分析器套件,這是您可以新增至專案的 Unity 套件。這個套件會在 Unity 編輯器中新增額外的記憶體分析器視窗。記憶體分析器可讓您更詳細地分析應用程式的記憶體用量。您可以儲存及比較快照,找出記憶體洩漏問題,或查看記憶體配置,找出記憶體片段化問題。
Unreal Memory Insights
使用 Unreal Engine 建構的應用程式可以透過 Unreal Memory Insights 查看記憶體配置和解除配置的詳細資訊,包括與記憶體區塊相關聯的低階記憶體 (LLM) 標記和呼叫堆疊。
記憶體洞察查詢系統可隨時找出即時分配情形、識別記憶體用量變化、找出記憶體流失,以及區分短期和長期分配。
從 UE 5.4 開始,Memory Insights 支援 Android 專案的記憶體追蹤和呼叫堆疊。
記憶體不足深入分析
Android 提供回呼和 API,可讓您減少遊戲的記憶體需求,並判斷先前遊戲執行作業終止的原因。
回呼
請勿註冊已淘汰的 trim 回呼。當系統達到記憶體上限時,Android 沒有任何 API 可偵測原生記憶體壓力事件。由於修剪回呼無法有效避免記憶體不足而終止程序,因此 Android 已淘汰所有修剪回呼,TRIM_MEMORY_UI_HIDDEN 和 TRIM_MEMORY_BACKGROUND 除外。
遊戲終止
Android 會盡可能使用所有可用記憶體來快取應用程式和遊戲,確保這些項目能快速載入 (提升使用者體驗),但如果記憶體不足,系統就會終止最耗用記憶體的應用程式和遊戲,釋出記憶體供裝置正常運作。
如要進一步瞭解如何提升遊戲記憶體用量,請參閱下列資訊、深入分析和最佳做法:
- 使用
ApplicationExitInfo: 這個 API 會傳回 Android 系統終止先前遊戲執行的原因。使用ApplicationExitInfo檢查先前程序執行是否因記憶體不足而終止。確認遊戲是否因記憶體不足而終止,以便最佳化遊戲,減少在該裝置上使用的記憶體。 - 查看實體 RAM 總量:
為防止遊戲在前台執行時遭到終止,並配合裝置效能,請查看每個裝置的實體 RAM 總量,據此微調遊戲記憶體用量。如果目標是避免應用程式在移至背景後不久遭到終止 (讓玩家可以執行多項工作),請使用 trim 回呼 (具體來說是
TRIM_MEMORY_UI_HIDDEN),減少遊戲的記憶體用量。