论文部分内容阅读
高级程序设计语言的实现方式一般分为编译、解释、混合三种。采用编译方式实现的高级语言在执行之前会使用编译器将程序编译为本地代码,运行效率较高;采用解释方式实现的高级语言不需要编译操作,在运行过程中由解释器负责执行程序,解释一条执行一条,执行效率较低;混合方式则将解释和编译结合起来,将源程序翻译为特定的中间代码,然后虚拟机负责执行中间代码。即时编译技术(just-in-time compilation)就是一种以混合方式实现高级语言的技术。应用该技术的执行引擎在解释执行一个程序的过程中,会在运行时将执行频率高的程序片段编译为目标代码,并编译执行。根据编译单位的不同,即时编译可以分为以方法(或是函数)为编译单位、以trace为编译单位这两类,前者每次都会将整个方法编译为目标代码,而后者每次只会编译被称作“trace”的代码片段。本文对基于trace的即时编译技术进行了研究,提出了一种通用的针对SECD抽象机的即时编译技术。采用该技术的执行引擎,将在SECD抽象机指令序列的解释执行中,以trace为单位进行热点探测,将执行频率高的trace视为热踪并将热踪提交给即时编译器。即时编译器将把热踪编译成Java字节码,由Java虚拟机负责执行这些字节码。任何能够用SECD抽象机实现的高级语言都可以采用该技术来提高程序执行效率。本文设计了一套SECD抽象机的指令集,实现了SECD抽象机,并给出了SECD指令序列到Java字节码的翻译算法。另一方面,SECD指令序列由SECD抽象机解释执行,而Java字节码则由Java虚拟机执行,不同执行方式的运行时环境并不相同。因此,本文还将讨论在不同情况下如何切换运行时环境,以保证在切换执行方式后程序能够正常运行。本文还提出了一种采用上述即时编译技术的通用执行引擎框架,并采用该框架实现了XQuery语言,实验表明采用上述即时编译技术可以有效提高程序的执行效率。