> That's when you measure and optimize.
How do you "optimize" the GC away after you wrote your entire database server in a language that uses it?
It's incredibly in common in game development, C# has a lot of features you can take advantage for this.
But the most naive example any language supports is simple object pooling.
Then more fancy, zero allocations tasks in C# https://github.com/cysharp/unitask
Object pooling and bump allocators using persistent scratch buffers, mostly. The latter what you'd use for read buffers in I/O intensive applications like databases and the like.
GC languages typically have features of the language and/or standard library that make GC the default, not the only option.
Lots of ways but an obvious and generic answer is to use pooling.
Starting by using a GC language that is strongly typed, compiles to native code, supports value types, memory pools/arenas if required, which provides best of both worlds.
Where GC means any kind of GC algorithm from CS point of view.