Many modern GC languages and runtimes have benefited greatly from improved escape analysis, which identifies memory allocations that have short, identifiable lifetimes, and removes those from the GC-managed heap entirely.
Of course, many GCs have indeed gotten better in their own right, but not using the GC at all remains the most potent optimization.