论文部分内容阅读
在网络环境下,一些网页脚本、分布式查询等可能动态生成查询请求或程序。这类查询或程序通常难以提前对其进行静态编译,如XQuery、JavaScript、Python、MATLAB等,它们一般是以解释执行方式运行。为了加快解释执行效率,可以通过即时编译技术,动态识别出程序中频繁执行的代码,对其进行编译处理后执行生成的目标代码,从而提高整个程序的执行效率。即时编译技术按照编译的应用对象不同可以分为两种:基于函数(Method)的即时编译技术和基于踪迹(Trace)的即时编译技术。基于函数的即时编译技术以函数为编译单元,编译粒度较粗。而基于Trace的即时编译技术按照控制流中频繁执行的路径作为即时编译的对象,能够完成更加细粒度的程序优化,并减少了对函数内非频繁代码进行编译的开销,在相当多的场景下能够更加有效的提高程序整体的执行效率。然而,基于Trace的即时编译系统涉及很多底层代码的优化,导致其开发难度较大。如果针对每一种程序设计语言都构造一个支持该优化技术的执行引擎,势必加大开发成本,导致该技术的应用范围受到一定限制。如果能够构造一个引入该技术的通用的执行引擎,便可快捷的将该技术扩展到其他语言的优化中。因此,为了扩展基于Trace的即时编译技术的应用范围,本文提出了一种针对CMinus语言程序的热踪编译技术。利用该热踪编译技术及其支撑工具,任何开发语言编写的程序只要能够翻译为CMinus程序都可以使用该技术提高其执行效率。本文的主要工作和贡献有:1)提出了针对CMinus语言程序的热点Trace探测技术:能够在运行时探测并识别CMinus程序代码中的热点Trace,并进行编译处理;2)设计了热点Trace的探测和动态合并方法:在运行时将对热点Trace进行探测并将出现重复节点的热点Trace进行动态合并,以降低运行时多个Trace间在重复节点处频繁地进行环境切换的开销;3)设计了不同运行时环境间的切换技术:能够保证程序运行过程中不同执行方式下运行时环境的一致性;4)设计并实现了一个基于Trace的CMinus语言通用即时编译系统,任何可以翻译为CMinus的语言都可以利用该技术提高执行效率,扩展了该技术的应用范围。实验结果表明这种即时编译技术能够显著地提高程序的执行效率,同时具有较好的可用性。