利用类型化对象形状扩展基本块版本控制
编程语言
2015-07-10 v1
摘要
典型的JavaScript(JS)程序具有大量的对象属性访问。因此,快速的属性读写对良好性能至关重要。遗憾的是,每次属性访问都隐含许多(通常是冗余的)动态检查,且JS的语义复杂性使得难以通过程序分析优化掉这些检查。我们引入两种技术来有效消除与对象属性访问相关的大部分动态检查。类型化形状(Typed shapes)使得能够基于对象属性类型进行代码特化,而无需潜在复杂且昂贵的分析。形状传播(Shape propagation)允许消除内联缓存中的冗余形状检查。这两种技术与基本块版本控制(Basic Block Versioning, BBV)结合尤为良好,但应易于适配到具有类型反馈的追踪即时(Just-In-Time, JIT)编译器和方法JIT。为评估所提技术的有效性,我们在Higgs(一个针对JS的类型特化JIT编译器)中实现了它们。这些技术与使用多态内联缓存(Polymorphic Inline Caches, PICs)的基线以及商业JS实现进行比较。实证结果表明,在测试的26个基准中,这些技术平均消除了48%的类型测试,代码大小减少17%,执行时间减少25%。在多个基准上,Higgs表现优于当前生产环境的JS虚拟机。
引用
@article{arxiv.1507.02437,
title = {Extending Basic Block Versioning with Typed Object Shapes},
author = {Maxime Chevalier-Boisvert and Marc Feeley},
journal= {arXiv preprint arXiv:1507.02437},
year = {2015}
}