The Android platform runs on the premise that free memory is wasted memory. Android tries to use all available memory at all times. For example, the system keeps apps in memory after they've been closed so the user can quickly switch back to them. For this reason, Android devices often run with very little free memory (see Android Memory allocation here).
The Android low memory killer (LMK) daemon process monitors the memory state of a running Android system and reacts to high memory pressure by killing the least essential processes to keep the system performing at acceptable levels.
To decide which process to kill, the LMK daemon uses an out of memory score called oom_adj_score to prioritize the running processes. Processes with a high score are killed first. Background apps are killed first; system processes, last. The following table lists the LMK scoring categories from high to low. Items in the highest-scoring category, in row one, are killed first:
LMK metric on Android vitals
Android vitals can help you monitor and improve your app's LMK rate. Android vitals measures only one LMK rate: User-perceived LMK rate.
The metric reflects the percentage of your daily active users who experienced at least one user-perceived LMK. A user-perceived LMK is an LMK that is likely to have been noticed by the user. For example, LMKs that happen while your app is displaying an activity or running as a foreground service.
You can find the metric under the Stability section in Android vitals:

As with similar to other core vital metrics, such as ANRs and crashes, you can filter the metrics, compare your metrics with your peer, or monitor the metric's change for a long period of time (up to 3 years). Data is available for existing apps starting from 28 Jan 2025.

Memory profiling tools
The following tools can help you find and diagnose memory issues in the following ways:
- See how your app allocates memory over time. You can find a real-time graph of how much memory your app is using, the number of allocated Java objects, and when garbage collection occurs.
- Initiate garbage collection events and take a snapshot of the Java heap while your app runs.
- Record your app's memory allocations, inspect all allocated objects, and view the stack trace for each allocation.
Android Studio Memory Profiler
Android Studio provides the Memory Profiler as a component of the Android Profiler which helps you identify memory leaks and memory churn that can lead to stutter, freezes, and even app crashes. The profiler shows a real-time graph of your app's memory use and lets you capture a heap dump, force garbage collection, and track memory allocation.

Unity memory profiling tools
If you are using Unity Engine to build your apps, you can follow Unity memory profiling guidance. Unity offers two tools to analyze memory usage in your application in Unity.
The first is the Memory Profiler module, which is a built-in profiler that gives you basic information about where your application uses memory.

The second tool is the Memory Profiler package, which is a Unity package that you can add to your project. The package adds an additional Memory Profiler window to the Unity Editor. The Memory Profiler enables you to analyze memory usage in your application in even more detail. You can store and compare snapshots to find memory leaks or see the memory layout to find memory fragmentation issues.

Unreal Memory Insights
Apps built by Unreal Engine can use Unreal Memory Insights to see detailed information about memory allocation and deallocation, including the Low Level Memory (LLM) tags and callstacks associated with blocks of memory.
The Memory Insights query system can find live allocations at any point in time, identify changes in memory usage, locate memory leaks, and differentiate short-term from long-term allocations.
From UE 5.4, Memory Insights supports memory tracing with callstacks for Android projects.
