Could use "per-lifetime" arenas, i.e. allocate based on statically known lifetime constraints. And add references between arenas. Then garbage collection could operate on the arena-level, rather than the object level. This means much less GC work. Also, the arena meta-data could be stored outside of the arenas themselves, such that GC can scan a lot of arenas without "jumping around" across memory.