GC compactions were indeed a problem for a number of systems. The trading systems in general had a policy of not allocating after startup. JS has a library, called "Zero" that provides a host of non-allocating ways of doing things.
Mutability may not result in very idiomatic code however, although it can often be wrapped with a functional API (e.g. parser combinators).