[发明专利]一种基于寄存器映射的动态编译方法无效
申请号: | 201110203365.0 | 申请日: | 2011-07-20 |
公开(公告)号: | CN102236575A | 公开(公告)日: | 2011-11-09 |
发明(设计)人: | 杨珉;张源;彭智俊;朱东来 | 申请(专利权)人: | 复旦大学 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 上海正旦专利代理有限公司 31200 | 代理人: | 陆飞;盛志范 |
地址: | 200433 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 寄存器 映射 动态 编译 方法 | ||
技术领域
本发明属于Java编译运行环境设计技术领域,具体涉及Java动态编译器的动态编译方法。
背景技术
作为目前应用最广泛的面向对象编程语言,Java语言因其特有的可移植性,被大量运用在嵌入式系统应用平台开发中。而嵌入式平台因其特有的硬件资源的有限性,如何使Java程序更加高效执行,成为现今嵌入式平台上的Java虚拟机急待解决的关键问题。
目前Java程序在嵌入式系统中主要采用两种模式运行:解释器执行模式以及即时编译执行模式。在嵌入式系统中,解释器执行模式虽然有实现简单、跨平台性良好等优点,但其执行效率却十分低下。而即时编译执行模式虽然能够提高Java程序的执行效率,却有着实现复杂、加重应用程序执行期间负担等缺点。这主要由于嵌入式平台上广泛采用RISC这种基于寄存器结构的处理芯片,无论是解释器执行模式还是即时编译执行模式在嵌入式平台上表现不甚理想。
当今Java的字节码表示除了传统的基于栈机构设计的Java字节码之外,还出现了基于寄存器设计的Java字节码,尤其以Google开发设计的嵌入式操作系统Android中的DEX字节码为典型。基于寄存器的字节码和同样基于寄存器设计的RISC芯片之间天然的同构型为Java虚拟机中即时编译其的构造带来了新的机遇。然而,如今的Java虚拟机中所采用的即时编译执行模式都是针对基于栈结构的字节码格式提出的,不能很好的利用这种新的基于寄存器的字节码。本发明提出了一种基于寄存器映射的动态编译技术,以更好的利用RISC架构和基于寄存器的Java字节码,从而获得更好的Java程序执行效果。
发明内容
本发明的目的在于针对目前的Java编译技术中缺少一套针对基于寄存器设计的Java字节码的动态编译技术的这一问题,提出一种新型的动态编译方法。
本发明将所有的Java函数划分为两类函数,即简单函数和复杂函数。
1、简单函数:虚拟寄存器使用数目不超过实际机器物理寄存器总个数。
2、复杂函数:虚拟寄存器使用数目大于或等于实际机器物理寄存器总个数。
本发明通过采用SPECjvm98这一测试用例,在ARM平台上对基于寄存器设计的Java字节码中函数使用寄存器情况进行了调研,调研结果如附图1所示。
通过调研可以发现,简单函数占函数总数的90%以上,这说明了在RISC架构机器上,丰富的物理寄存器数目足以用来进行对基于寄存器的Java字节码中的虚拟寄存器进行一一映射的快速分配。
本发明采用的技术方案为:利用RISC处理器拥有大量寄存器这一特性,在动态编译阶段,以函数为粒度,将基于寄存器的Java字节码中所使用的虚拟寄存器和物理寄存器通过一一映射进行绑定。通过动态编译直接生成本地代码。
根据函数类型的不同,所述进行寄存器映射的策略也不同,具体为:
1、在编译简单函数时,采取如下寄存器映射策略,如附图2所示:
(1)编译简单函数时,虚拟寄存器和物理寄存器的映射关系是由函数本身决定,固定为一一映射。
(2)在每个函数中,所有的虚拟寄存器都必须指派一个物理寄存器与之映射,即使是在字节码中并未使用到寄存器也不能例外;而任意一个物理寄存器都必须分配给至少一个虚拟寄存器进行映射绑定。
(3)被分配的物理寄存器总数目必需等于虚拟寄存器的总数目。
(4)在编译某些复杂的基于寄存器设计的字节码的指令时,比如一些虚拟机相关的指令,由于其复杂的逻辑关系,所以需要使用到一些临时寄存器,所以在这种情况下,需要选择一些已经被映射过的物理寄存器来做为临时寄存器,故而在编译该条字节码指令时,这些被选作用来充当临时寄存器的物理寄存器中的值将被压入栈上进行保存,编译完后,将取回栈上保存的值存入物理寄存器中进行恢复。
2、在编译复杂函数时,采取如下寄存器映射策略,如附图2所示:
首先将实际的物理寄存器与字节码中的虚拟寄存器一一映射,此外,不能映射到物理寄存器的虚拟寄存器将映射到线程栈上一段溢出区(spill area),如附图3所示。
(1)在编译复杂函数时,由于复杂函数众多的虚拟寄存器数目超出了机器实际的物理寄存器数目,所以并不是所有的虚拟寄存器都能够和物理寄存器进行一一映射的。所以多出来的虚拟寄存器将用栈来存储,这部分栈上使用的区域被称为溢出区域。
(2)在每个函数中,所有的虚拟寄存器都必须指派一个物理寄存器与之映射,即使是在字节码中并未使用到寄存器也不能例外;而任意一个物理寄存器都必须分配给至少一个虚拟寄存器进行映射绑定。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于复旦大学,未经复旦大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110203365.0/2.html,转载请声明来源钻瓜专利网。