Quick answer: Out-of-memory (OOM) crashes happen when the game requests memory the system can't provide. The three root causes are a memory leak (usage grows until exhausted), loading too much at once (a spike beyond the budget), or simply exceeding the memory limit of a constrained platform like mobile or console. Capture the crash with memory and device context to distinguish them, then fix the leak, reduce peak usage, or budget to the platform.

An out-of-memory crash is the game hitting a hard wall: it needs memory, there is none left, and it dies. The tricky part is that the line where it finally crashes (an innocent allocation) is rarely the real culprit, the memory was consumed by something else beforehand. So fixing OOM crashes is about finding what ate the memory, and the pattern of when they happen points at which of the three causes you have.

The Three Causes and How to Tell Them Apart

OOM crashes have one proximate trigger (an allocation that failed) but three root causes, distinguishable by their pattern. A memory leak shows up as crashes correlated with long sessions, memory creeps up over time until it's exhausted, so the crash happens 'after a while.' Loading too much shows up as crashes at a specific moment, a level load, opening a big area, where peak memory spikes. And exceeding the platform budget shows up as crashes concentrated on low-memory devices, the game simply needs more than that hardware has.

The when and where tell you which. Crashes spread over sessions = leak. Crashes at a specific load point = peak spike. Crashes only on low-memory hardware = budget. Capturing the crash with memory and device context makes this diagnosis direct.

Diagnosing With Field and Profiler Data

Bugnet captures device context including memory information with each crash and groups crashes by signature, so OOM crashes cluster and arrive with the evidence to distinguish the cause: do they correlate with long sessions (leak), a specific moment (spike), or low-memory devices (budget)? This field pattern tells you where to focus before you even open a profiler.

Then confirm with a memory profiler locally: for a suspected leak, watch whether memory climbs steadily over a session; for a suspected spike, watch peak memory during the level load or action and see what's consuming it; for a budget problem, measure your total memory footprint against the constrained platform's limit. The profiler shows what is using the memory; the field data told you which scenario to investigate.

How to Fix It

The fix depends on the cause. For a leak, find and stop the allocations that are never freed (objects not destroyed, handles not released, growing caches) so memory stays flat over a session. For a peak spike, reduce how much is loaded at once, unload the old level before loading the new, stream or load on demand, compress textures, so the transient peak fits in the budget. For a platform budget problem, reduce your overall memory footprint (asset sizes, texture resolution, loaded content) to fit the target device, and account for VRAM separately since too many or too-large textures can exhaust graphics memory specifically.

After fixing, verify: a profiler should show flat memory (leak fixed) or a lower peak (spike fixed) or a total footprint under the device limit (budget fixed), and the field OOM cluster should disappear on the new build via version-tagged reporting. Memory crashes are very fixable once you know which of the three you're dealing with, and the field pattern usually tells you fast.

An OOM crash dies at an innocent line, the real culprit ate the memory earlier. Leak, peak spike, or budget? The pattern of when it crashes tells you which to fix.