- 概念
- JIT compilers 即时编译器,JIT讲解 编译器与解释器的区别和工作原理
- Stack Map Points (SMPs).这些潜在的跨层传输点称为堆栈映射点(SMPs)。是指遇到极端情况时,执行从高层转换到低层的转换。这要求转换的时候,高层和低层拥有着相同的状态。这限制了一些优化的发生。
- 观点
- 脚本语言滞后的一个主要原因是它们的动态特性。由于程序员不声明类型,编译器必须在运行时发现对象的类型和结构。这就是为什么高级脚本语言编译器是jit
- 先进的即时编译器的特性:
- 执行广泛的分析以检测常见的情况或程序的“热路径”(频繁执行)行为,以至于它们可以执行代码优化,从而提高常见情况下的性能。
- 它们被组织称多个层。每一层在生成代码的时间和生成代码的质量之间提供了不同的权衡。
- 由更高级的层生成的代码包含对极端情况的检查。这是因为这些层生成的专用代码只能处理常见情况。当代码检测到一个极端情况或“冷路径”时,它会跳转到优化程度较低的层。
- 论文发现的问题
- 由其最先进的层(FTL)生成的代码具有很高的smp频率。
- smp的优化限制效果和smp保护检查的开销导致脚本语言的性能低下。
- 文章的贡献
- 第一:发现了频繁的层间跳转点需要跨层的一致状态,从而限制了优化。
- 我们建议修改以减轻smp的影响,并扩展JavaScript JIT编译器来支持我们的修改
- 我们评估了使用轻量级和重量级TM硬件对NoMap的改进
- 方法
- 用终止指令取代SMPs
- 这样的话就不需要受需要保持跨层之间相同的状态限制优化的影响
- 合并数组边界检查
- 如果循环中的数组是单调访问的,只需要判断最后访问的下标是否溢出,如果溢出,就回滚,然后跨到低层重新执行
- 去掉溢出检查
- 设置一个SOF的标志,用于判断过程中是否出现了溢出。
- 评估
- 指令数的减少
- 执行时间的减少