应用于Java操作系统中虚拟机的编译体系实现方法

文档序号:6543903阅读:163来源:国知局
专利名称:应用于Java操作系统中虚拟机的编译体系实现方法
技术领域
本发明涉及Java虚拟机设计领域、编译器设计领域,以及嵌入式设备平台对Java支持的解决方法。
背景技术
目前,实现Java平台主要有三种方式Java虚拟机以虚拟机运行在现有操作系统之上,实现Java程序的运行。这种方式由于其简易、低代价等特点,是现在最常用的一种。
Java操作系统这种方式又分为两种1.将Java虚拟机整合进现有的操作系统;2开发一种全新的独立的基于Java的操作系统。这种方式省去了虚拟机到操作系统那一层的通讯和调度,因而较之虚拟机的方式有效率的提高。但要开发一个全新的操作系统并提供相关的支持(包括驱动程序支持和应用软件支持)代价也是非常大的。
Java芯片这种方式将操作系统这一软件的架构整合进了芯片之中,或者打造一个全新的Java专用芯片。由于采用硬件的方式来解决软件的问题,这种方式的性能比较前两种都有更大的提升,但缺点也是显而易见的丧失了Java的跨平台特性。
可以看出,第一种平台与第二种平台都要依赖于Java虚拟机的支持。而Java虚拟机的核心——执行引擎其实质上就是编译机制。
传统的Java虚拟机中执行引擎大都采用解释、即时编译、自适应优化等执行策略。其编译体系采用了普通的一级编译/解释,而由执行引擎来控制具体执行方式,不能充分发挥编译体系的作用,并且即时编译技术虽然使得java程序速度大为提高,但该技术仍是一种解释过程,所以仍慢于编译型程序的速度。

发明内容
为了获得更好的代码编译性能、代码执行性能,为了提高Java虚拟机的执行效率,为了提供一个更优异的嵌入式Java支持平台,本发明的目的在于提供一种应用于Java操作系统中虚拟机的编译体系实现方法本发明解决技术问题所采用的技术方案是1、一种应用于Java操作系统中虚拟机的编译体系实现方法,其特征在于1)四层体系结构与功能
虚处理层C1对外处理编译解释任务,对内负责代码预处理;基准编译层C2对程序首次编译,作简单的优化,以满足程序快速执行的需要;优化编译层C3生成高度优化和快速执行的中间代码,又针对性的选择编译,是程序达到本地最优;汇编层汇编器将中间代码汇编成本地平台的目标代码;层与层之间并不是普通的层层向上负责,而是一个纵横的关系,四层体系结构既保证了对现存java程序的兼容性虚处理层、基准编译层、优化编译层保证了现有java程序的运行环境;又满足了程序快速执行和针对性优化的目的汇编层对中间代码进行编译汇编,最终生成本地二进制目标代码;2)编译优化过程①当程序首次编译时,实现步骤首次编译指程序源码第一次编译为本地目标代码的过程;I.程序进入虚处理层C1进行预处理,虚处理层C1为程序中的每一个要被编译的方法、函数、变量生成基本信息,写入信息表,确保执行方法提前编译,从而减少编译时间的损耗;II.调用基准编译层C2,利用信息表中的已经生成的程序基本信息,对程序作快速处理,作机器无关优化,为程序分配寄存器,从而实现快速编译产生程序的中间代码,最后将优化信息和中间代码写入信息表;III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;②当程序二次编译时,实现步骤二次编译指当程序在目标平台运行时,操作系统动态跟踪程序执行情况进行统计,根据优化机制,适时调用编译器,作再一次的编译过程;I.操作系统将运行程序的信息提交到虚处理层C1,虚处理层C1将原来编译器其为程序生成的信息表读入到内存;II.调用优化编译层C3,优化编译层C3读取信息表,提取原来的基本信息、优化信息以及中间代码,利用操作系统统计数据采取机器相关优化,重新生成程序的中间代码,最后将优化信息和中间代码写入信息表;III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;在未来的程序执行中,编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行程序的最优。
本发明具有的有益效果是首先,多层编译体系设计,充分体现了模块化、安全性、可移植性方面的独特优势,具有很高的运行安全性以及开发过程中的高可重用性,大大降低了多平台开发成本;其次,多层体系带来了多种编译策略的选择,既考虑了执行引擎本身执行的效率,又提高了目标代码执行的速度,在整体上提高了Java操作系统的运行速度,特别是在嵌入式平台这类本身硬件运行速度不是很快的情况下,更具有明显的效果;再次,本编译体系采用混合语言来实现,前三层的Java和最后汇编层的汇编语言。这种方式突出了Java语言在模块化、安全性、灵活性方面的优势,同时也利用了汇编语言的强大功能,能在更大程度上优化目标代码,同时也十分有利于平台移植,方便不同的商业应用。最后本发明引入汇编器做底层的编译器,把编译的工作提到在本地机安装时来进行,避开了执行时的时间代价,避免了在程序运行时解释字节码的消耗,从而保证了程序的时刻高效,动态优化。


附图是本发明的流程图。
具体实施例方式
本发明按照上述四层体系来布局,将每一层作为一个功能模块来实施。下面将就本体系作详细介绍。
1)四层体系结构与功能①虚处理层C1对外处理编译解释任务,对内负责代码预处理。为程序每一个要被编译的方法生成一个信息表,信息表用于保存程序的基本信息、优化信息,中间代码。它确保每一个方法在执行之前都已进行编译,而避免那些从没有被调用过的方法被重复编译,从而减少编译时间的损耗。另外,在二次编译时虚处理层C1也负责读入程序原信息表,调用优化编译层C3作进一步的优化。因此,虚处理层C1并不进行实际的编译工作,既不是一个独立的编译器。它主要完成一些预处理工作,再判断选择底层的其他编译器来完成具体的编译过程。
②基准编译层C2是这个编译器体系的基础,负责将Java字节码转换成中间代码并根据需要调用汇编层汇编器生成本地执行代码,它的目标是进行快速编译,做机器无关优化,最终产生合理的快速目标指令代码。
③优化编译层C3生成高度优化和快速执行的目标指令代码,优化编译层C3是一个优化编译器,主要进行与机器相关的代码优化,它以生成高度优化和快速执行的目标指令代码、而不是编译器执行速度,作为自身的目标。
④汇编层汇编器将中间代码汇编成目标平台本地代码,汇编层汇编器在系统中自成一个独立的部分,它将中间代码汇编成目标平台本地代码。它由基准编译层C2或者优化编译层C3来调用执行任务。
层与层之间并不是普通的层层向上负责,而是一个纵横的关系,四层体系结构既保证了对现存java程序的兼容性虚处理层、基准编译层、优化编译层保证了现有java程序的运行环境;又满足了程序快速执行和针对性优化的目的汇编层对中间代码进行编译汇编,最终生成本地二进制目标代码;2)编译优化过程①当程序首次编译时,实现步骤首次编译指程序源码第一次编译为本地目标代码的过程;I.程序进入虚处理层C1进行预处理,虚处理层C1为程序中的每一个要被编译的方法、函数、变量生成一个信息表,确保执行方法提前编译,从而减少编译时间的损耗;II.调用基准编译层C2,利用信息表中的已经生成的程序基本信息,对程序的字节码作快速处理,减少其在内存直接执行的操作的数量(常常为0),但同时增加可用寄存器到32、64或128,降低寄存器分配难度。清除代码中重复出现的表达式,如果有多个表达式的值相同,保存的第1次的计算值并删除重复计算,清除程序中不可到达及死代码,将程序中的高代价代码替换为低代价代码,采用常量传播方法将程序中的恒定变量替换为常量,对循环进行循环代码外提,削减强度,删除归纳变量等优化方法,建立一个虚堆栈来消除大量的堆栈操作。最终形成中间代码。作机器相关优化,为程序分配寄存器,从而实现快速编译并产生程序的中间代码,最后将优化信息和中间代码写入信息表;III.信息表中的中间代码输出到汇编层,将中间代码汇编成目标平台本地代码;②当程序二次编译时,实现步骤二次编译指当程序在目标平台运行时,操作系统动态跟踪程序执行情况进行统计,根据优化机制,适时调用编译器,作再一次的编译过程;I.操作系统将运行程序的信息提交到虚处理层C1,虚处理层C1根据执行路径查找程序的信息表,如果存在,就将原来编译其为程序生成的信息表读入到内存,如果不存在给出提示信息,退出优化;II.调用优化编译层C3,优化编译层C3读取信息表,取出信息表中的基本信息、优化信息、中间代码,利用操作系统统计数据采取相应的优化方案,做机器相关优化,为程序分配寄存器,重新生成程序的中间代码,最后将优化信息和中间代码写入信息表,优化编译层C3的执行过程分为四个步骤1、由虚处理层C1装入的信息表中获得基本信息、优化信息、中间代码;2、进行第二遍优化,即机器相关优化;3、寄存器重新分配;4、将优化信息、以及优化后的中间代码写回到信息表;第1步虚处理层C1读入信息表,读取程序的基本信息、优化信息、中间代码。信息表中的基本信息、优化信息、中间代码是在程序上次编译时生成的,其中中间代码已经做过一些优化,被于程序作相关保存,以备二次编译时使用。优化编译层根据这些信息判断是否优化、重新编译,或如何优化、编译。
第2步优化编译层C3在原始代码的基础上对语句参数进行优化替换并消除死代码,即从来不会被执行的代码,根据本机特性作多处理器优化、特殊指令优化、无用之令消除,根据操作系统的统计数据,预测哪条分支最有可能运行、哪个过程经常调用以及哪部分代码最经常执行,调整转移结构,循环和过程代码来最小化最经常执行部分的运行时间。
第3步的寄存器分配,根据统计数据把经常要计算变量引用次数并将高引用率的变量放入寄存器,为变量重新分配可获得的机器寄存器,将利用率较低的变量移入内存。最后阶段的代码生成将调用汇编层汇编器对优化后的中间代码进行解析,从而生成目标执行代码。
第4步将优化信息以及优化后的中间代码写回到信息表,替换原来的优化信息和中间代码,并调用汇编层。
III.中间代码输出到汇编层,将中间代码再次汇编,从而生成高度优化和快速执行的目标指令代码在未来的程序执行中,编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行代码的最优。
本发明的流程图如图1所示,操作系统调用编译器,对程序进行编译。首先启动虚处理层虚处理层C1对当前程序执行虚处理,第一步判断该程序是首次编译,还是二次编译,如果是首次编译,虚处理层C1为程序生成唯一的一张信息表,保存程序的方法、函数、常变量的基本信息,否则装载程序的信息表。其次,信息表生成后,如果是首次编译,调用基准编译层C2,利用信息表中的基本信息,对程序进行与机器无关优化,从而实现快速编译并最终在信息表中产生程序的中间代码,将优化信息和中间代码写回到信息表,如果是二次编译,调用优化编译层C3读入信息表,提取基本信息、优化信息、中间代码,优化编译C3利用统计数据采取相应的优化方案,进行与机器相关优化,重新生成优化信息以及程序的中间代码,替换信息表中的优化信息和原始中间代码;再次第三步中间代码输出到汇编层,将中间代码汇编成目标平台本地代码。在以后的程序执行中,本编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行代码的最优。
实施例现有一个程序源码A,内含变量a,变量b,变量c,函数a、函数b,以及方法a,源码A由操作系统提交给本编译器,虚处理层C1获得源码A后,判断源码A为首次编译,在内存中建立信息表T,在表中为变量a,变量b,变量c,函数a,函数b,方法a分别建立对应的数据结构Tva,Tvb,Tvc,Tfuna,Tmetha,调用基准编译层C2,对原码A作一系列机器无关代码优化,在信息表T中mva,mvb,mvc,mfuna,mmetha处登记变量a,变量b,变量c,函数a,函数b,方法a做的优化处理方式以及优化指标,即优化信息,最后编译为中间代码B,把优化信息和中间代码B写入信息表T,并保存,中间代码B提交到汇编层汇编器,由汇编层汇编器将中间代码编译成最终的目标代码程序C。
程序C生成后可以直接在操作系统中运行,在程序C运行过程中,操作系统监视程序中的“热区”,并加以统计,在确定“热区”代码块可优化后之后启动本编译器,将统计情况及程序信息交给虚处理层C1,虚处理层C1判断该程序为二次编译,装入对应的信息表T,如果没有发现信息表T,退出编译器。装入成功后调用优化编译层C3,优化编译层读入基本信息、优化信息、中间代码B,根据统计信息和优化方案对中间代码B进行机器相关优化,在信息表T中中mva,mvb,mvc,mfuna,mmetha处登记变量a,变量b,变量c,函数a,函数b,方法a做的优化处理方式以及优化指标,即优化信息,重新编译为中间代码B,把优化信息和中间代码B写入信息表T,并保存,中间代码提交到汇编层汇编器,由汇编层汇编器将中间代码编译成最终优化后的目标代码程序C。
权利要求
1.一种应用于Java操作系统中虚拟机的编译体系实现方法,其特征在于1)四层体系结构与功能虚处理层C1对外处理编译解释任务,对内负责代码预处理;基准编译层C2对程序首次编译,作简单的优化,以满足程序快速执行的需要;优化编译层C3生成高度优化和快速执行的中间代码,又针对性的选择编译,是程序达到本地最优;汇编层汇编器将中间代码汇编成本地平台的目标代码;层与层之间并不是普通的层层向上负责,而是一个纵横的关系,四层体系结构既保证了对现存java程序的兼容性虚处理层、基准编译层、优化编译层保证了现有java程序的运行环境;又满足了程序快速执行和针对性优化的目的汇编层对中间代码进行编译汇编,最终生成本地二进制目标代码;2)编译优化过程①当程序首次编译时,实现步骤首次编译指程序源码第一次编译为本地目标代码的过程;I.程序进入虚处理层C1进行预处理,虚处理层C1为程序中的每一个要被编译的方法、函数、变量生成基本信息,写入信息表,确保执行方法提前编译,从而减少编译时间的损耗;II.调用基准编译层C2,利用信息表中的已经生成的程序基本信息,对程序作快速处理,作机器无关优化,为程序分配寄存器,从而实现快速编译产生程序的中间代码,最后将优化信息和中间代码写入信息表;III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;②当程序二次编译时,实现步骤二次编译指当程序在目标平台运行时,操作系统动态跟踪程序执行情况进行统计,根据优化机制,适时调用编译器,作再一次的编译过程;I.操作系统将运行程序的信息提交到虚处理层C1,虚处理层C1将原来编译器其为程序生成的信息表读入到内存;II.调用优化编译层C3,优化编译层C3读取信息表,提取原来的基本信息、优化信息以及中间代码,利用操作系统统计数据采取机器相关优化,重新生成程序的中间代码,最后将优化信息和中间代码写入信息表;III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;在未来的程序执行中,编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行程序的最优。
全文摘要
本发明公开了一种应用于Java操作系统中虚拟机的编译体系实现方法。以Java语言为主,汇编语言为辅,采用四层体系架构虚处理层、基准编译层、优化编译层、汇编层汇编器;以操作平台的目标代码为最终编译结果,有针对性地选择优化编译,即考虑程序执行速度又顾及虚拟机自身效率,在Java操作系统的支持下动态优化,使程序运行达到最优。这一方法在突出了Java语言在模块化、安全性、灵活性方面的优势,同时也利用了汇编语言的强大功能,能在更大程度上优化目标代码,同时也十分有利于平台移植,方便不同的商业应用,从整体上提高了Java操作系统的运行速度,特别是在嵌入式平台这类本身硬件运行速度不是很快时,更具有明显的效果。
文档编号G06F9/455GK1790267SQ20051006199
公开日2006年6月21日 申请日期2005年12月14日 优先权日2005年12月14日
发明者陈天洲, 戴红军, 陈国兵, 胡威, 黄域 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1