一种基于嵌入式虚拟机的动态编译的方法及装置的制造方法

文档序号:9826129阅读:189来源:国知局
一种基于嵌入式虚拟机的动态编译的方法及装置的制造方法
【技术领域】
[0001]本发明实施例涉及嵌入式虚拟机的技术领域,尤其涉及一种基于嵌入式虚拟机的动态编译的方法及装置。
【背景技术】
[0002]由于嵌入式平台本身在硬件资源方面存在的诸多限制,并且嵌入式虚拟机所要执行的应用中存在大量的循环,例如中断调用和安全策略等反复调用,会对虚拟机的效率造成一定的影响。当嵌入式虚拟机在执行大量数据传输时,势必会对数据的传输造成影响,从而影响到整个系统。
[0003]如果要充分利用嵌入式虚拟机的各种功能,比如安全监测、代码识别、数据隔离等,系统性能的优化是有待提高的。

【发明内容】

[0004]本发明实施例提出一种基于嵌入式虚拟机的动态编译的方法及装置,旨在解决如何提高嵌入式虚拟机运行性能的问题。
[0005]第一方面,一种基于嵌入式虚拟机的动态编译的方法,所述方法包括:
[0006]获取字节码中的代码块;
[0007]若所述代码块是已知热点,则从预设寄存器中获取本地代码进行编译;
[0008]若所述代码块不是已知热点,则获取所述代码块的运行信息;
[0009]根据所述代码块的运行信息确定所述代码块是否符合预设热点的阈值条件,所述运行信息包括所述代码块的历史编译次数;
[0010]若所述代码块符合预设热点的阈值条件,则将所述代码块编译为本地代码,并将所述本地代码存储在预设寄存器中,返回执行获取字节码中的代码块的操作。
[0011 ]优选地,所述将所述代码块编译为本地代码,并将所述本地代码存储在预设寄存器中,包括:
[0012]分析器读入所述热点的代码块,用语法分析的方法将所述代码块转化为代码生成器能使用的内部语义信息;
[0013]所述代码生成器根据所述内部语义信息生成本地代码,并将所述本地代码发送给代码部署器;
[0014]所述代码部署器将所述本地代码存储在所述预设寄存器中。
[0015]优选地,所述代码部署器将所述本地代码存储在所述预设寄存器中,包括:
[0016]所述代码部署器在所述预设寄存器中为所述本地代码分配一个预设最小单位的存储空间;
[0017]若所述本地代码的容量增大,则所述代码部署器继续为所述本地代码分配至少一倍的所述最小单位的存储空间,并将新分配的最小单位的存储空间的末尾地址和与上一个分配的最小单位的存储空间的开始地址通过指针链接。
[0018]优选地,所述将所述本地代码存储在预设寄存器中之后,还包括:
[0019]获取所述本地代码存储在所述预设寄存器中的地址信息,并将所述地址信息替代所述字节码中与对应代码块相同的所有代码块的原地址。
[0020]优选地,所述从预设寄存器中获取本地代码进行编译,包括:
[0021 ]读取所述字节码中的热点的地址信息,所述热点的地址信息为所述热点对应的本地代码在所述预设寄存器的地址信息;
[0022]根据所述热点的地址信息获取所述热点对应的本地代码,并根据所述本地代码进行编译。
[0023]优选地,所述方法还包括:
[0024]每间隔预设时间获取所述本地代码的运行信息,根据所述本地代码的运行信息确定所述本地代码是否符合预设热点的阈值条件,所述本地代码的运行信息包括所述本地代码的运行次数;
[0025]若所述本地代码不符合预设热点的阈值条件,则在所述预设寄存器中删除所述本地代码。
[0026]第二方面,一种基于嵌入式虚拟机的动态编译的装置,所述装置包括:
[0027]第一获取模块,用于获取字节码中的代码块;
[0028]编译模块,用于若所述代码块是已知热点,则从预设寄存器中获取本地代码进行编译;
[0029]第二获取模块,用于若所述代码块不是已知热点,则获取所述代码块的运行信息;
[0030]第一确定模块,用于根据所述代码块的运行信息确定所述代码块是否符合预设热点的阈值条件,所述运行信息包括所述代码块的历史编译次数;
[0031]返回模块,用于若所述代码块符合预设热点的阈值条件,则将所述代码块编译为本地代码,并将所述本地代码存储在预设寄存器中,返回执行第一获取模块的功能。
[0032]第二方面,所述返回模块,包括:
[0033]分析器,用于读入所述热点的代码块,用语法分析的方法将所述代码块转化为代码生成器能使用的内部语义信息;
[0034]代码生成器,用于根据所述内部语义信息生成本地代码,并将所述本地代码发送给代码部署器;
[0035]代码部署器,用于将所述本地代码存储在所述预设寄存器中。
[0036]优选地,所述代码部署器,用于:
[0037]在所述预设寄存器中为所述本地代码分配一个预设最小单位的存储空间;
[0038]若所述本地代码的容量增大,则继续为所述本地代码分配至少一倍的所述最小单位的存储空间,并将新分配的最小单位的存储空间的末尾地址和与上一个分配的最小单位的存储空间的开始地址通过指针链接。
[0039]优选地,所述装置还包括:
[0040]替代模块,用于获取所述本地代码存储在所述预设寄存器中的地址信息,并将所述地址信息替代所述字节码中与对应代码块相同的所有代码块的原地址。
[0041 ]优选地,所述编译模块,包括:
[0042]读取单元,用于读取所述字节码中的热点的地址信息,所述热点的地址信息为所述热点对应的本地代码在所述预设寄存器的地址信息;
[0043]编译单元,用于根据所述热点的地址信息获取所述热点对应的本地代码,并根据所述本地代码进行编译。
[0044]优选地,所述装置还包括:
[0045]第二确定模块,用于每间隔预设时间获取所述本地代码的运行信息,根据所述本地代码的运行信息确定所述本地代码是否符合预设热点的阈值条件,所述本地代码的运行信息包括所述本地代码的运行次数;
[0046]删除模块,用于若所述本地代码不符合预设热点的阈值条件,则在所述预设寄存器中删除所述本地代码。
[0047]本发明实施例提供一种基于嵌入式虚拟机的动态编译的方法及装置,提取字节码中的常用编译的代码块,并将该常用编译的代码块编译并存放在访问快速的寄存器中,减少常用编译的代码块的反复执行的次数,省去了大量的调用和重新解释的过程,并且存放在寄存器中更可以提高执行速度,节省时间。
【附图说明】
[0048]图1是本发明实施例一提供的一种基于嵌入式虚拟机的动态编译的方法的流程示意图;
[0049]图2是本发明实施例提供的一种编译代码块的结构示意图;
[0050]图3是本发明实施例提供的一种存储本地代码的结构示意图;
[0051 ]图4是本发明实施例二提供的一种基于嵌入式虚拟机的动态编译的方法的流程示意图;
[0052]图5是本发明实施例提供的一种编译模块的结构示意图;
[0053]图6是本发明实施例提供的一种操作数栈与寄存器间的映射关系图;
[0054]图7是本发明实施例三提供的一种基于嵌入式虚拟机的动态编译的装置的结构示意图;
[0055]图8是本发明实施例四提供的一种嵌入式虚拟机的系统结构示意图。
【具体实施方式】
[0056]下面结合附图并通过【具体实施方式】来进一步说明本发明的技术方案。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0057]在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各项步骤的顺序可以被重新安排。当其步骤完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
[0058]实施例一
[0059]图1是本发明实施例一提供的一种基于嵌入式虚拟机的动态编译的方法的流程示意图,该方法可以由基于嵌入式虚拟机的动态编译的装置执行,其中该装置可由软件和/或硬件实现。如图1所示,该方法包括:
[0060]步骤101,获取字节码中的代码块;
[0061]具体的,在嵌入式虚拟机进行代码编译的过程中,先获取字节码中的代码块的内容,代码块是指使用“{}”括起来的一段代码,根据位置及声明关键字的不同,代码块可以分为普通代码块、构造块、静态代码块、同步代码块四种。
[0062]在开始编译字节码之后,首先获取第一个代码块,执行后续的编译操作,当第一个代码块编译完成之后,再获取下一个代码块,以此类推,直至字节码编译完成。
[0063]步骤102,若所述代码块是已知热点,则从预
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1