[发明专利]一种支持混合模式执行的Java虚拟机执行引擎有效
申请号: | 201110227049.7 | 申请日: | 2011-08-09 |
公开(公告)号: | CN102236576A | 公开(公告)日: | 2011-11-09 |
发明(设计)人: | 杨珉;张源;周波;朱东来 | 申请(专利权)人: | 复旦大学 |
主分类号: | G06F9/45 | 分类号: | G06F9/45;G06F9/455 |
代理公司: | 上海正旦专利代理有限公司 31200 | 代理人: | 陆飞;盛志范 |
地址: | 200433 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 支持 混合 模式 执行 java 虚拟机 引擎 | ||
1.一种支持混合模式执行的Java虚拟机执行引擎,包括:类加载器、Java方法分发器、解释器、即时编译器、Java本地方法接口,其特征在于:
(1)所述Java方法分发器存在于虚拟机的类加载器中,该Java方法分发器负责依据分发策略将整个程序中所执行到的不同的方法路由给不同的引擎执行;
所述分发策略是指一种用来自动标记Java方法即将被何种引擎执行的机制,分发策略分为两种,即以方法热度为依据的分发策略和以虚拟寄存器数目为依据的分发策略;以方法热度为依据的分发策略使用方法的热度值决定将方法标记为何种执行引擎执行,以虚拟寄存器数目为依据的分发策略根据当前方法所需要的虚拟寄存器数量是否超过某一个阀值来决定方法分发到何种执行引擎;
依据分发策略,在类加载过程中,实现对方法分发标记,方法被标记为“INT”或者“JIT”,分别表示该方法在随后被执行到时,将在解释器或者即时编译器上执行;方法分发是以一个完整的方法为粒度,不同的方法可以分配给不同的引擎执行,同一个方法不能同时分配给多个引擎执行;
(2)在所述解释器与即时编译器两种执行模式之间设计有方法调用桥,简称为INT-JIT桥;INT-JIT方法调用桥负责维护解释器模式与即时编译器模式相互调用时数据的完整性和一致性,以及程序的状态;
(3)在Java本地方法接口分别与解释器和即时编译器执行模式之间设计有方法调用桥,前者简称为INT-JNI桥,后者简称为JIT-JNI桥;INT-JNI方法调用桥负责维护不同的解释器模式下调用JNI方法时的状态,JIT-JNI方法调用桥负责维护即时编译器模式下调用JNI方法时的状态。
2.如权利要求1所述的支持混合模式执行的Java虚拟机执行引擎的执行方法,其特征在于具体步骤为:
(1)指定分发策略
本发明提供两种策略,即以方法热度为依据的分发策略和以虚拟寄存器数目为依据的分发策略;以方法热度为依据的分发策略使用方法的热度值决定将方法标记为何种执行引擎执行,具体作法是,将热方法标记为即时编译器上执行的方法,将冷方法标记为解释器上执行的方法;以虚拟寄存器数目为依据的分发策略根据当前方法所需要的虚拟寄存器数量是否超过某一个阀值来决定方法分发到何种执行引擎;经过本步骤后,类加载器在随后进行的类加载结束前,调用方法分发器对方法进行分发;
(2)方法分发
类加载器在进行正常的类加载结束前,调用方法分发器,根据指定的分发策略,对当前被加载类的每个方法进行分发标记;方法被标记为“解释器”或者“即时编译器”,分别表示此方法如果随后被执行,那么它将在解释器或者即时编译器上执行;
(3)混合执行
方法分发完成后,方法按照Java程序所设定的逻辑运行;方法在解释器模式或者即时编译器模式下执行过程中,可能需要调用其他方法;如果被调用方法与当前方法的标记不相同,那么混合执行就会发生;即在不同引擎上执行的方法需要相互调用的时候,执行流从一个引擎流出,并流入到另一个执行引擎,而它们需要不同的程序状态;INT-JIT方法调用桥、INT-JNI方法调用桥以及JIT-JNI方法调用桥在执行流进入目的引擎之前,接管执行控制权;INT-JIT方法调用桥负责维护解释器模式与即时编译器模式相互调用时数据的完整性和一致性,以及程序的状态;INT-JNI方法调用桥以及JIT-JNI方法调用桥分别负责维护不同的解释器模式下调用JNI方法和即时编译器模式下调用JNI方法时的状态;
如果混合执行发生在解释器与即时编译器之间,并称执行流流出的引擎为源引擎,流入的引擎为目标引擎,那么,INT-JIT方法调用桥首先从源引擎模式的栈中取得参数和必要的数据,包括线程结构指针、方法引用以及返回地址,并对目标引擎模式的栈作相应的格式化以满足目标引擎模式的栈规范,随后,INT-JIT方法调用桥在目标引擎的栈上新建栈帧,并压入来自源引擎的参数数据;该新建栈帧被称为代理栈帧,它并不对应任何方法,其目的只是用来维护引擎跨越时必须保存的信息,该信息包括源引擎类型、源引擎的返回地址、源引擎栈的栈帧位置与程序计数器;通过该代理栈帧,当方法从目标引擎执行完毕返回至源引擎时,信息得到正确的恢复,从而保证混合模式对于Java程序的透明与一致性;
如果混合执行发生在解释器与Java本地方法接口或者即时编译器与Java本地方法接口之间,那么,虚拟机知道JNI方法调用完成后,程序的执行流将返回至何种引擎,为了返回至正确的源引擎,本发明对原有的INT-JNI和JIT-JNI桥进行了扩展,添加了新的标志位,以指示源引擎类型;当源引擎为解释器时,该标志设置为“INT”,当JNI方法执行完返回时,依据此标志正确返回到解释器模式下继续执行;当源引擎为即时编译器时,该标志设置为“JIT”,当JNI方法执行完返回时,依据此标志正确返回到即时编译器模式下继续执行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于复旦大学,未经复旦大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110227049.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:分体落地式空调器的室内机
- 下一篇:流量自适应热水供暖换热机组