G1 的影响是“硬”的、宏观的:它通过明显的STW停顿,直接制造全局性的、周期性的锁竞争瓶颈。
ZGC 的影响是“软”的、微观的:它通过移除STW停顿解决了G1的核心问题,使系统更平滑,但其持续的读屏障开销增加了底层CPU压力,可能在微观层面轻微影响锁竞争的表现。
选择的关键:
如果你的应用追求极致的延迟稳定性和可预测性,或者堆内存非常大,ZGC 通常是更好的选择,它能从根本上避免因GC导致的长锁持有时间。
如果应用是吞吐量优先,且可以容忍偶尔的百毫秒级延迟,G1 仍然是成熟可靠的选择。
无论选择哪个GC,激烈的锁竞争本身都是应用层需要重点优化的设计问题。 GC选择只是改变了锁竞争发生的“环境背景”,而不是解决锁竞争本身的“银弹”。优化锁粒度、使用无锁数据结构(如ConcurrentHashMap)、或减少临界区范围,始终是提升并发性能的首要任务