Knowledge Base: Garbage Collector Internals

Unreal Engine’s Garbage Collector is a standard Mark & Sweep collector. This post explains its stages and what it does under the hood.
These are the major stages of the Garbage Collector:

Mark unreachable.


Are there any plans to implement incremental support for the marking phase? Would this be possible without major rewrite? – Note that Unity is apparently using an Open Source GC ( Boehm–Demers–Weiser) that does support incremental marking and sweep phases. Was this ever considered for UE?

I’m not aware of any such plans. (EDIT: We’re working on it! :+1:)
If the marking phases are having an impact on your game’s performance it might be a symptom of your game having too many UObjects alive. Usually bigger games don’t need more than a couple hundred thousand UObjects alive at any time.

If you’re spawning lots of UObjects with short lifetimes you can look into either re-using them, using FStructs instead of UObjects where you can, or putting them into a GC cluster to reduce garbage collection overhead.

For long-lived UObjects, there’s the option of loading in less / HLODding more.

1 Like