知识卡片
减少短生命周期对象分配是避开垃圾回收停顿的关键
内容
按代管理的垃圾回收器里,大量创建短命小对象会频繁触发年轻代回收,这类回收往往是全部停止式的。JPC团队把指令译码器这类性能关键路径代码写得极度节制:一个6500行的类里只保留42次真正创建新对象的地方,运行时几乎不再新建对象。语言层面有自动垃圾回收不等于应随意创建对象——在明确的性能热点上主动控制分配次数,是绕开GC停顿最直接的手段。
参考来源
- 位置:《架构之美》第9章《JPC:一个纯Java的x86 PC模拟程序》9.7节《从事一项毫无成功希望的斗争》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0203.xhtml)
- 结论依据:原文明确"在真实模式的译码器中,这种最低限度的方式导致一个6500行代码的类只有42个'new'关键字实例……一旦创建这个译码器的一个实例……那是较少暂停的译码",并总结"仅仅因为JVM可以进行自动垃圾收集,并不意味着将迫使你去运用它"。
- 原始内容:在真实模式的译码器中,这种最低限度的方式导致一个6500行代码的类只有42个"new"关键字实例……仅仅因为JVM可以进行自动垃圾收集,并不意味着将迫使你去运用它。在代码的关键性能部分,慎重地使用对象实例。