What is an OOM event?
From the user's perspective, when an app suddenly crashes, the usual cause one imagines is an exception resulting in a crash, but another common cause is an Out Of Memory (OOM) event. When an app uses a large amount of memory, and the system's memory becomes insufficient, the OS will forcefully terminate the application. Usually, this is invisible to the user (Background and inactive apps are terminated first) but if an app uses a large amount of memory while being displayed to the user, and system memory becomes insufficient, the OS will forcefully terminate the application. This specific case is judged as an OOM event, and the number of such events can be seen from the SmartBeat console.
How are OOM events detected?
It's not possible to correctly detect 100% of OOM events; because, when an app terminates due to an OOM, the event cannot be caught internally as the app is terminated from outside the application process. When an app exits while being displayed, this is an abnormal termination, of which OOM events are only one possible cause.
For that reason, when an app terminates while being displayed on the screen, the following flow is used to determine the cause of the termination the next time the app is started, and report an OOM event.
* Java OutOfMemoryError errors are handled as an exception/crash
* The following case may also be counted as an OOM event
- When an app is forcefully terminated by xcode or other debugger and the version isn't changed
- Forceful terminations as a result of watchdog timer and other OS events
- If the device is suddenly powered off while the app is being displayed
* OOM detection feature is enabled on following SDKs
- iOS SDK : 1.23 and up
- Android SDK : 1.20 and up
- Unity SDK : 1.14 and up
- Unreal Engine SDK : 1.1 and up
- Cordova SDK : 1.1.0 and up
Memory Usage Performance Guidelines（apple）