JVM Internals G1GC region-based heap concurrent marking stop-the-world compaction safepoints write barriers ZGC concurrent relocation load barriers GC Comparison: Go GC vs G1GC vs ZGC pause models design tradeoffs