调优代码胜过调优 Garbage Collector

Tune Code Before Your Garbage Collector

4peter_lawrey💬 1
调优代码胜过调优 Garbage Collector

在 Java 低延迟开发中,盲目纠结于选择 ZGC 还是 Shenandoah 等 Garbage Collector 可能本末倒置。通过 Chronicle-FIX 的实测发现,仅仅移除一条冗余的 SLF4J 日志,对 p99.99 延迟的改善幅度竟高达三个数量级,远超切换垃圾回收器的效果。更有趣的是,代码优化后,原本表现平平的 Parallel GC 反而成了最佳选择。这提醒我们:在调整 JVM 参数前,先审视代码逻辑,往往能带来更惊人的性能飞跃。

"优化你的内存分配可能比选择 Garbage Collector 带来的影响大得多,甚至可能改变哪个才是最佳垃圾回收器的结论。"

HN 评论区

  • 有评论者指出 Java 中数值自动装箱的缓存机制(如 128 以下)会导致测试环境误判,掩盖生产环境中真实的 GC 压力,这种隐蔽性被比作软件界的 DieselGate。
  • 一位从业者分享在金融数据处理中,通过手动缓存 Immutable 对象(如 LocalDate 或 Integer)来复用引用,从而显著减少对象分配和 GC 压力,直到 Valhalla 项目落地前这仍是必要手段。
  • 评论者反驳了关于日志对象在低级别下被丢弃的说法,指出 LogEvent 对象在创建时若引用了 OldGen 中的大对象,会触发 GC Nepotism 机制导致其被自动晋升,从而引发昂贵的 Major GC。
  • 有观点认为 C++ 是 1990 年代针对特定硬件控制需求的最优权衡,但对现代开发者而言,其手动内存管理的复杂性是一种倒退,而 JVM 的 Hotspot 优化已能超越早期的 Native 代码方案。

同日更多故事 · 2026-07-13