本申请涉及计算机,尤其涉及一种java智能合约的编译方法、装置、存储介质以及电子设备。
背景技术:
1、通过编译执行的技术,可以让java智能合约从原先的虚拟化执行的模式转变为机器码执行的模式,可以大幅提升执行效率,但是编译执行是基于操作数栈的执行模式,导致执行效率还有进一步的优化空间。
技术实现思路
1、本申请提供了一种java智能合约的编译方法、装置、存储介质以及电子设备,以解决java智能合约基于操作数栈的编译执行模式的执行效率低的技术问题。
2、第一方面,本申请提供了一种java智能合约的编译方法,包括:将java智能合约的每一个字节码指令编译为对应的中间代码指令;将目标中间代码指令的操作栈行为转换为操作寄存器行为,其中,上述目标中间代码指令为所有上述中间代码指令中存在操作栈行为的任意一个中间代码指令;根据操作行为类型将每一个中间代码指令编译为对应的机器码指令,其中,上述操作行为类型包括上述操作栈行为和上述操作寄存器行为;执行所有上述机器码指令,得到上述java智能合约的执行结果。
3、第二方面,本申请提供了一种java智能合约的编译装置,包括:第一编译模块,用于将java智能合约的每一个字节码指令编译为对应的中间代码指令;转换模块,用于将目标中间代码指令的操作栈行为转换为操作寄存器行为,其中,上述目标中间代码指令为所有上述中间代码指令中存在操作栈行为的任意一个中间代码指令;第二编译模块,用于根据操作行为类型将每一个中间代码指令编译为对应的机器码指令,其中,上述操作行为类型包括上述操作栈行为和上述操作寄存器行为;执行模块,用于执行所有上述机器码指令,得到上述java智能合约的执行结果。
4、作为一种可选的示例,上述转换模块包括:第一处理单元,用于将每一个上述中间代码指令确定为当前中间代码指令,对上述当前中间代码指令执行如下操作:在上述当前中间代码指令中存在操作栈行为的情况下,将上述当前中间代码指令确定为上述目标中间代码指令;在获取到空闲寄存器的情况下,将上述目标中间代码指令的操作栈行为转换为操作寄存器行为,并将目标寄存器与上述目标中间代码指令进行绑定,其中,上述目标寄存器为上述空闲寄存器中的任意一个寄存器。
5、作为一种可选的示例,上述第一处理单元,还用于在将上述当前中间代码指令确定为上述目标中间代码指令之后,在未获取到空闲寄存器的情况下,保持上述目标中间代码指令的操作行为类型为操作栈行为。
6、作为一种可选的示例,上述第二编译模块包括:第二处理单元,用于将每一个上述中间代码指令确定为当前中间代码指令,对上述当前中间代码指令执行如下操作:在上述当前中间代码指令的操作行为类型为操作寄存器行为的情况下,获取与上述当前中间代码指令绑定的目标寄存器;根据上述目标寄存器,以操作寄存器的方式对上述当前中间代码指令进行编译,得到上述当前中间代码指令对应的机器码指令。
7、作为一种可选的示例,上述第二处理单元,还用于在获取与上述当前中间代码指令绑定的目标寄存器之前,在上述当前中间代码指令的操作行为类型为操作栈行为的情况下,以操作栈的方式对上述当前中间代码指令进行编译,得到上述当前中间代码指令对应的机器码指令。
8、作为一种可选的示例,上述执行模块包括:第一执行单元,用于在目标机器码指令的操作行为类型为操作寄存器行为的情况下,在上述目标机器码指令对应的寄存器上,以操作寄存器的方式执行上述目标机器码指令,其中,上述目标机器码指令为所有上述机器码指令中的任意一个机器码指令。
9、作为一种可选的示例,上述执行模块包括:第二执行单元,用于在目标机器码指令的操作行为类型为操作栈行为的情况下,以操作栈的方式执行上述目标机器码指令,其中,上述目标机器码指令为所有上述机器码指令中的任意一个机器码指令。
10、第三方面,本申请提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被处理器运行时执行上述java智能合约的编译方法。
11、第四方面,本申请还提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为通过所述计算机程序执行上述的java智能合约的编译方法。
12、在本申请实施例中,采用了将java智能合约的每一个字节码指令编译为对应的中间代码指令;将目标中间代码指令的操作栈行为转换为操作寄存器行为,其中,上述目标中间代码指令为所有上述中间代码指令中存在操作栈行为的任意一个中间代码指令;根据操作行为类型将每一个中间代码指令编译为对应的机器码指令,其中,上述操作行为类型包括上述操作栈行为和上述操作寄存器行为;执行所有上述机器码指令,得到上述java智能合约的执行结果的方法,由于在上述方法中,引入了cpu(central processing unit,中央处理器)中的寄存器,寄存器是一种cpu中可以进行高速操作的内存单元,cpu操作寄存器的效率远大于cpu操作内存的速率,因此,将中间代码指令的操作栈行为转换为操作寄存器行为,从而实现了提高java智能合约的执行效率的目的,进而解决了java智能合约基于操作数栈的编译执行模式的执行效率低的技术问题。
1.一种java智能合约的编译方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述将目标中间代码指令的操作栈行为转换为操作寄存器行为包括:
3.根据权利要求2所述的方法,其特征在于,在将所述当前中间代码指令确定为所述目标中间代码指令之后,所述方法还包括:
4.根据权利要求1所述的方法,其特征在于,所述根据操作行为类型将每一个中间代码指令编译为对应的机器码指令包括:
5.根据权利要求4所述的方法,其特征在于,在获取与所述当前中间代码指令绑定的目标寄存器之前,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,所述执行所有所述机器码指令,得到所述java智能合约的执行结果包括:
7.根据权利要求1所述的方法,其特征在于,所述执行所有所述机器码指令,得到所述java智能合约的执行结果包括:
8.一种java智能合约的编译装置,其特征在于,包括:
9.一种计算机可读的存储介质,所述计算机可读的存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行所述权利要求1至7任一项中所述的方法。
10.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至7任一项中所述的方法。