知识卡片
即时编译不必在"快"和"优化得好"之间二选一,靠的是分层的选择性编译
内容
常见的误解是”运行时编译必须够快,所以只能做简单粗糙的编译”——这在早期的JVM里确实是事实,但现代成熟的虚拟机普遍采用一种分层策略:先用一个非常快、几乎不做优化的编译器把方法快速跑起来,同时在线收集这个方法实际被调用的频率信息,只有真正的热点方法才会被送去用一个激进、精细的优化编译器重新编译。这解决了一个看似矛盾的需求:既要保证程序刚启动时响应够快,又要让长期运行的核心逻辑吃满优化红利。这提示一个更通用的架构模式:当”快速响应”和”深度优化”这两个目标看起来互相冲突时,可以考虑把决策拆成两层——先用便宜的默认路径覆盖所有情况,再用profiling数据挑出真正值得投入重资源优化的一小部分。
参考来源
《架构之美》第10章《元循环虚拟机的力量:Jikes RVM》