CN112114818B - 表达式的java编译方法和装置 - Google Patents
表达式的java编译方法和装置 Download PDFInfo
- Publication number
- CN112114818B CN112114818B CN202011043605.0A CN202011043605A CN112114818B CN 112114818 B CN112114818 B CN 112114818B CN 202011043605 A CN202011043605 A CN 202011043605A CN 112114818 B CN112114818 B CN 112114818B
- Authority
- CN
- China
- Prior art keywords
- expression
- compiled
- java
- code
- preprocessing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种表达式的JAVA编译方法和装置,该方法包括:根据待编译表达式生成groovy代码;将该groovy代码输入groovy脚本引擎得到二进制的JAVA类;利用JVM装载JAVA类以在缓存中建立待编译表达式和该JAVA类的对应关系,可以用普通的算数表达式形式书写高精度类型的计算公式,使得JAVA代码支持高精度数学类型的运算符重载,能够使用中缀表达式进行高精度计算,而且编写的计算公式实时生效(热更新或动态加载),无需重启服务器,降低复杂度,可靠性高,扩展性好。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种表达式的JAVA编译方法和装置。
背景技术
目前业内大部分脚本语言不支持高精度数字的计算,无法用于金融业的金额计算。为了解决这个问题,部分系统采用Oracle的PL/SQL进行计算,支持高精度,但无法支持复杂的数据结构,且数据库通常独立部署,计算时存在一次网络调用,延迟较高,基于此,目前还有部分厂商采用模板直接生成JAVA class的方法,性能高。JAVA是一种面向对象的编程语言,由于其严格的面向对象风格,很适合实际业务逻辑的抽象,在web应用中使用非常广泛。但是,目前JAVA代码不支持高精度数学类型的运算符重载,无法使用中缀表达式进行高精度计算,而且编写的计算公式无法实时生效(热更新),需要重启服务器。
发明内容
针对现有技术中的问题,本发明提供一种表达式的JAVA编译方法和装置、电子设备以及计算机可读存储介质,能够至少部分地解决现有技术中存在的问题。
为了实现上述目的,本发明采用如下技术方案:
第一方面,提供一种表达式的JAVA编译方法,包括:
根据待编译表达式生成groovy代码;
将该groovy代码输入groovy脚本引擎得到二进制的JAVA类;
利用JVM装载JAVA类以在缓存中建立待编译表达式和该JAVA类的对应关系。
进一步地,该根据待编译表达式生成groovy代码,包括:
对该待编译表达式进行分词得到由元素组成的链状结构;
遍历该链状结构以对各元素按照元素类型进行对应的预处理进而得到该groovy代码。
进一步地,表达式的JAVA编译方法还包括:
获取该缓存中该JAVA类的调用频率;
判断该调用频率是否满足预设条件;
若是,触发JIT以将该JAVA类直接编译为机器码。
进一步地,该根据待编译表达式生成groovy代码之前,还包括:
对该待编译表达式进行预处理。
进一步地,该对该待编译表达式进行预处理,包括:
屏蔽该待编译表达式中全部的面向对象的特性;和/或
将该待编译表达式中的等号替换为双等号;和/或
将该待编译表达式中的外部输入变量转换为预设格式。
第二方面,提供一种表达式的JAVA编译装置,包括:
groovy代码生成模块,根据待编译表达式生成groovy代码;
二进制转换模块,将该groovy代码输入groovy脚本引擎得到二进制的JAVA类;
JVM装载模块,利用JVM装载JAVA类以在缓存中建立待编译表达式和该JAVA类的对应关系。
进一步地,该groovy代码生成模块包括:
分词单元,对该待编译表达式进行分词得到由元素组成的链状结构;
遍历预处理单元,遍历该链状结构以对各元素按照元素类型进行对应的预处理进而得到该groovy代码。
进一步地,表达式的JAVA编译装置还包括:
调用频率获取模块,获取该缓存中该JAVA类的调用频率;
判断模块,判断该调用频率是否满足预设条件;
机器码编译模块,若调用频率满足预设条件,触发JIT以将该JAVA类直接编译为机器码。
进一步地,表达式的JAVA编译装置还包括:
预处理模块,对该待编译表达式进行预处理。
进一步地,该预处理模块包括:
屏蔽单元,屏蔽该待编译表达式中全部的面向对象的特性;和/或
等号替换单元,将该待编译表达式中的等号替换为双等号;和/或
格式转换单元,将该待编译表达式中的外部输入变量转换为预设格式。
第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行该程序时实现上述的表达式的JAVA编译方法的步骤。
第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的表达式的JAVA编译方法的步骤。
本发明提供的表达式的JAVA编译方法和装置,该方法包括:根据待编译表达式生成groovy代码;将该groovy代码输入groovy脚本引擎得到二进制的JAVA类;利用JVM装载JAVA类以在缓存中建立待编译表达式和该JAVA类的对应关系,可以用普通的算数表达式形式书写高精度类型的计算公式,使得JAVA代码支持高精度数学类型的运算符重载,能够使用中缀表达式进行高精度计算,而且编写的计算公式实时生效(热更新或动态加载),无需重启服务器,降低复杂度,可靠性高,扩展性好。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中的服务器S1与客户端设备B1之间的架构示意图;
图2为本发明实施例中的服务器S1、客户端设备B1及数据库服务器S2之间的架构示意图;
图3是本发明实施例中的表达式的JAVA编译方法的流程示意图一;
图4示出了本发明实施例中步骤S100的具体步骤;
图5是本发明实施例中的表达式的JAVA编译方法的流程示意图二;
图6是本发明实施例中的表达式的JAVA编译方法的流程示意图三;
图7举例说明了本发明实施例中的编译流程;
图8举例说明了本发明实施例中编译后的计算流程;
图9举例说明了嵌套计算;
图10是本发明实施例中的表达式的JAVA编译装置的结构框图一;
图11示出了本发明实施例中的groovy代码生成模块的具体结构;
图12是本发明实施例中的表达式的JAVA编译装置的结构框图二;
图13是本发明实施例中的表达式的JAVA编译装置的结构框图三;
图14为本发明实施例电子设备的结构图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
术语解释:
中缀表达式:是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:1+2×3-4),中缀表达式是常用的算术表示方法。
JVM:是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JIT:Just-in-time,当Java执行runtime环境时,每遇到一个新的类别(class:类别是Java程式中的功能群组),JIT编译器在此时就会针对这个类别进行编译(compile)作业。经过编译后的程式,被优化成相当精简的原生型指令码(native code),这种程式的执行速度相当快。
groovy脚本引擎:Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,Groovy代码能够与Java代码很好地结合,也能用于扩展现有代码。
目前JAVA代码不支持高精度数学类型的运算符重载,无法使用中缀表达式进行高精度计算,而且编写的计算公式无法实时生效(热更新),需要重启服务器。
为至少部分解决上述技术问题,本发明实施例提供了一种表达式的JAVA编译方法,可以用普通的算数表达式形式书写高精度类型的计算公式,使得JAVA代码支持高精度数学类型的运算符重载,能够使用中缀表达式进行高精度计算,而且编写的计算公式实时生效(热更新或动态加载),无需重启服务器,降低复杂度,可靠性高,扩展性好。
有鉴于此,本申请提供了一种表达式的JAVA编译装置,该装置可以为一种服务器S1,参见图1,该服务器S1可以与至少一个客户端设备B1通信连接,所述客户端设备B1可以将待编译表达式或包括待编译表达式的程序或应用发送至所述服务器S1,所述服务器S1可以在线接收所述客户端设备B1发送的数据。所述服务器S1可以在线或者离线对获取的数据进行预处理,根据待编译表达式生成groovy代码;将所述groovy代码输入groovy脚本引擎得到二进制的JAVA类;利用JVM装载JAVA类以在缓存中建立待编译表达式或称表达式编号或标识和所述JAVA类的对应关系。而后,所述服务器S1可以接收客户端设备B1发送的表达式编号或标识和表达式所依赖的变量,以便执行表达式的运算。
另外,参见图2,所述服务器S1还可以与至少一个数据库服务器S2通信连接,所述数据库服务器S2用于存储groovy脚本引擎和/或JVM。
可以理解的是,所述客户端设备B1可以包括智能手机、平板电子设备、便携式计算机、台式电脑等。
所述服务器与所述客户端设备之间可以使用任何合适的网络协议进行通信,包括在本申请提交日尚未开发出的网络协议。所述网络协议例如可以包括TCP/IP协议、UDP/IP协议、HTTP协议、HTTPS协议等。当然,所述网络协议例如还可以包括在上述协议之上使用的RPC协议(Remote Procedure Call Protocol,远程过程调用协议)、REST协议(Representational State Transfer,表述性状态转移协议)等。
图3是本发明实施例中的表达式的JAVA编译方法的流程示意图一;如图3所示,该表达式的JAVA编译方法可以包括以下内容:
步骤S100:根据待编译表达式生成groovy代码;
具体地,可以将待编译表达式字符串嵌入预先准备好的模板,生成groovy代码。
其中,数学表达式结合预先准备好的程序模板,模板中引入了常用的数学函数、日期函数、字符串函数、数据库查询函数等常用函数。另外,所有函数都使用静态引入,在表达式中全局可用,不存在函数命名空间。
步骤S200:将所述groovy代码输入groovy脚本引擎得到二进制的JAVA类;
步骤S300:利用JVM装载JAVA类以在缓存中建立待编译表达式和所述JAVA类的对应关系。
其中,计算时输入对应的公式编码和参数值就可以得到计算结果。
通过采用上述技术方案,可以用普通的算数表达式形式书写高精度类型的计算公式,使得JAVA代码支持高精度数学类型的运算符重载,能够使用中缀表达式进行高精度计算,而且编写的计算公式实时生效(热更新或动态加载),无需重启服务器,降低复杂度,可靠性高,扩展性好。
在一个可选的实施例中,参见图4,该步骤S100包括:
步骤S110:对所述待编译表达式进行分词得到由元素组成的链状结构;
步骤S120:遍历所述链状结构以对各元素按照元素类型进行对应的预处理进而得到所述groovy代码。
具体地,预先准备好的程序模板先对所述待编译表达式进行分词,将表达式切成符号、运算符、函数名、变量等链状结构,然后对链状结构进行遍历,根据不同元素类型进行对应预处理,根据预设的预处理规则,得到groovy代码。
在一个可选的实施例中,参见图5,该表达式的JAVA编译方法还可以包括:
步骤S400:获取所述缓存中所述JAVA类的调用频率;
步骤S500:判断所述调用频率是否满足预设条件;
若是,执行步骤S600;否则,返回步骤S400。
步骤S600:触发JIT以将所述JAVA类直接编译为机器码。
本发明提供的表达式的JAVA编译方法,可以实现表达式计算工具,将输入的表达式字符串嵌入预先准备好的模板,生成groovy代码。Groovy代码经过groovy脚本引擎,编译之后生产二进制的JAVA类,由JVM装载,在一定频率的调用后,触发JIT,直接编译为机器码,达到高性能,参见图7。
在一个可选的实施例中,参见图6,该表达式的JAVA编译方法还可以包括:
步骤S700:对所述待编译表达式进行预处理。
其中,对所述待编译表达式进行预处理,包括:屏蔽所述待编译表达式中全部的面向对象的特性;和/或将所述待编译表达式中的等号替换为双等号;和/或将所述待编译表达式中的外部输入变量转换为预设格式。
具体地,表达式与模板合并之前,使用预先构造好的状态机逐个读入表达式字符,进行校验和预处理。规则如下:
屏蔽表达式中全部的面向对象的特性,不允许使用“.”操作符对输入变量进行操作,“.”对象仅作为数字的小数点使用。由于groovy默认不允许方法名以数字开始,因此只需检测“.”的后缀字符是否为数字,如果不在[0-9]的范围内则校验不通过。
状态机读入表达式中的“=”时,替换为“==”,groovy中“=”号代表赋值,数学中单个“=”表示相等。由于数学表达式不存在赋值操作,因此遵循数学表达式书写原则,采用“=”表示相等。
采集表达式中使用到的外部输入变量。在书写表达式时,变量要求采用#{XXX}的形式标注,程序在读入“#{”两个字符时,自动向后搜索“}”,初步截取变量名。采集到全部变量名后,将变量名中的数组下标过滤(如ARRAY[1]过滤后为ARRAY),最终去重复,得到表达式对应的全部输入变量。
图7举例说明了本发明实施例中的编译流程;参见图8,计算时,输入预先配置好的表达式编码,转入表达式所依赖的变量。表达式对应的groovyclass会构造一个新的groovy对象实例。该实例绑定输入变量后,即可计算出对应的结果。当变量名为某个公式编码时,如果对应编码作为输入变量已经赋值,则代入输入值。否则计算过程会递归向下执行,先计算表达式中引用的其他表达式,待所有下层表达式(变量)计算完毕后,最终得出计算结果,参见图9。
发明实施例提供的JAVA编译方法,能够动态加载,无需重启服务器,书写简便,接近数学表达式,性能强,最终直接编译为机器码。
基于同一发明构思,本申请实施例还提供了一种表达式的JAVA编译装置,可以用于实现上述实施例所描述的方法,如下面的实施例所述。由于表达式的JAVA编译装置解决问题的原理与上述方法相似,因此表达式的JAVA编译装置的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图10是本发明实施例中的表达式的JAVA编译装置的结构框图一。如图10所示,该表达式的JAVA编译装置具体包括:groovy代码生成模块10、二进制转换模块20以及JVM装载模块30。
groovy代码生成模块10根据待编译表达式生成groovy代码;
二进制转换模块20将所述groovy代码输入groovy脚本引擎得到二进制的JAVA类;
JVM装载模块30利用JVM装载JAVA类以在缓存中建立待编译表达式和所述JAVA类的对应关系。
通过采用上述技术方案,可以用普通的算数表达式形式书写高精度类型的计算公式,使得JAVA代码支持高精度数学类型的运算符重载,能够使用中缀表达式进行高精度计算,而且编写的计算公式实时生效(热更新或动态加载),无需重启服务器,降低复杂度,可靠性高,扩展性好。
在一个可选的实施例中,参见图11,该groovy代码生成模块包括:分词单元11以及遍历预处理单元12。
分词单元11对所述待编译表达式进行分词得到由元素组成的链状结构;
遍历预处理单元12遍历所述链状结构以对各元素按照元素类型进行对应的预处理进而得到所述groovy代码。
在一个可选的实施例中,参见图12,该表达式的JAVA编译装置还可以包括:调用频率获取模块40、判断模块50以及机器码编译模块60。
调用频率获取模块40获取所述缓存中所述JAVA类的调用频率;
判断模块50判断所述调用频率是否满足预设条件;
机器码编译模块60若调用频率满足预设条件,触发JIT以将所述JAVA类直接编译为机器码。
在一个可选的实施例中,参见图13,该表达式的JAVA编译装置还可以包括:预处理模块70,用于对所述待编译表达式进行预处理。
值得说明的是,预处理模块可以包括:屏蔽单元和/或等号替换单元和/或格式转换单元。
屏蔽单元屏蔽所述待编译表达式中全部的面向对象的特性;
等号替换单元,将所述待编译表达式中的等号替换为双等号;
格式转换单元,将所述待编译表达式中的外部输入变量转换为预设格式。
上述实施例阐明的装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为电子设备,具体的,电子设备例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
在一个典型的实例中电子设备具体包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现下述上述的表达式的JAVA编译方法的步骤。
下面参考图14,其示出了适于用来实现本申请实施例的电子设备的结构示意图。
如图14所示,电子设备包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM))603中的程序而执行各种适当的工作和处理。在RAM603中,还存储有系统操作所需的各种程序和数据。CPU601、ROM602、以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡,调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装如存储部分608。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的表达式的JAVA编译方法的步骤。
在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (6)
1.一种表达式的JAVA编译方法,其特征在于,包括:
对待编译表达式进行预处理;
根据待编译表达式生成groovy代码;
将所述groovy代码输入groovy脚本引擎得到二进制的JAVA类;
利用JVM装载JAVA类以在缓存中建立待编译表达式和所述JAVA类的对应关系;
获取所述缓存中所述JAVA类的调用频率;
判断所述调用频率是否满足预设条件;
若是,触发JIT以将所述JAVA类直接编译为机器码;
所述对待编译表达式进行预处理,包括:
屏蔽所述待编译表达式中全部的面向对象的特性;和/或
将所述待编译表达式中的等号替换为双等号;和/或
将所述待编译表达式中的外部输入变量转换为预设格式。
2.根据权利要求1所述的表达式的JAVA编译方法,其特征在于,所述根据待编译表达式生成groovy代码,包括:
对所述待编译表达式进行分词得到由元素组成的链状结构;
遍历所述链状结构以对各元素按照元素类型进行对应的预处理进而得到所述groovy代码。
3.一种表达式的JAVA编译装置,其特征在于,包括:
预处理模块,对待编译表达式进行预处理;
groovy代码生成模块,根据待编译表达式生成groovy代码;
二进制转换模块,将所述groovy代码输入groovy脚本引擎得到二进制的JAVA类;
JVM装载模块,利用JVM装载JAVA类以在缓存中建立待编译表达式和所述JAVA类的对应关系;
调用频率获取模块,获取所述缓存中所述JAVA类的调用频率;
判断模块,判断所述调用频率是否满足预设条件;
机器码编译模块,若调用频率满足预设条件,触发JIT以将所述JAVA类直接编译为机器码;
所述预处理模块包括:
屏蔽单元,屏蔽所述待编译表达式中全部的面向对象的特性;和/或
等号替换单元,将所述待编译表达式中的等号替换为双等号;和/或
格式转换单元,将所述待编译表达式中的外部输入变量转换为预设格式。
4.根据权利要求3所述的表达式的JAVA编译装置,其特征在于,所述groovy代码生成模块包括:
分词单元,对所述待编译表达式进行分词得到由元素组成的链状结构;
遍历预处理单元,遍历所述链状结构以对各元素按照元素类型进行对应的预处理进而得到所述groovy代码。
5.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至2任一项所述的表达式的JAVA编译方法的步骤。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至2任一项所述的表达式的JAVA编译方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011043605.0A CN112114818B (zh) | 2020-09-28 | 2020-09-28 | 表达式的java编译方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011043605.0A CN112114818B (zh) | 2020-09-28 | 2020-09-28 | 表达式的java编译方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112114818A CN112114818A (zh) | 2020-12-22 |
CN112114818B true CN112114818B (zh) | 2023-06-20 |
Family
ID=73798612
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011043605.0A Active CN112114818B (zh) | 2020-09-28 | 2020-09-28 | 表达式的java编译方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112114818B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986404A (zh) * | 2021-10-29 | 2022-01-28 | 中国银行股份有限公司 | JavaScript脚本执行方法、装置、电子设备及存储介质 |
CN115150084B (zh) * | 2022-09-05 | 2023-01-03 | 翼方健数(北京)信息科技有限公司 | 一种安全多方计算方法、系统和计算机可读存储介质 |
CN115437683A (zh) * | 2022-11-10 | 2022-12-06 | 平安银行股份有限公司 | 基于sdk的变量配置方法、装置及计算机可读存储介质 |
CN117270838B (zh) * | 2023-11-22 | 2024-02-13 | 太平金融科技服务(上海)有限公司 | 一种通用公式脚本的生成方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942228A (zh) * | 2013-01-23 | 2014-07-23 | 纽海信息技术(上海)有限公司 | 规则引擎、计算方法、业务系统及调用方法 |
CN109460237A (zh) * | 2018-10-25 | 2019-03-12 | 北京顶象技术有限公司 | 代码的编译方法及装置 |
-
2020
- 2020-09-28 CN CN202011043605.0A patent/CN112114818B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942228A (zh) * | 2013-01-23 | 2014-07-23 | 纽海信息技术(上海)有限公司 | 规则引擎、计算方法、业务系统及调用方法 |
CN109460237A (zh) * | 2018-10-25 | 2019-03-12 | 北京顶象技术有限公司 | 代码的编译方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112114818A (zh) | 2020-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112114818B (zh) | 表达式的java编译方法和装置 | |
EP3876116B1 (en) | Method and apparatus for running mini program, electronic device, and storage medium | |
CN106462412B (zh) | 动态地产生的基于模式的类的结构识别 | |
EP3365772B1 (en) | Missing include suggestions for external files | |
US10120655B2 (en) | Seamless high performance interoperability between different type graphs that share a garbage collector | |
WO2020259417A1 (zh) | 一种区块链的数据解析方法及装置 | |
US9038033B1 (en) | Techniques and mechanisms for web application minification | |
US20200167209A1 (en) | Configurable Analytics For Microservices Performance Analysis | |
CN114327481A (zh) | 代码处理方法、装置、设备以及存储介质 | |
CN115729560B (zh) | 程序代码处理方法及装置 | |
CN116226921A (zh) | 一种脱敏处理方法及装置 | |
CN111259047A (zh) | 数据加载方法、装置、设备及其存储介质 | |
CN115061678A (zh) | 一种基于浏览器代理服务的代码编译方法及客户端 | |
CN117075912B (zh) | 用于程序语言转换的方法、编译方法及相关设备 | |
CN115981652B (zh) | 语言互操作方法、装置、存储介质及程序产品 | |
CN111506301B (zh) | 绕过系统限制反射调用的方法及相关设备 | |
CN117519691B (zh) | 应用程序处理方法、装置、计算机设备和存储介质 | |
CN111258675B (zh) | 共享前端组件的渲染方法、装置、设备及存储介质 | |
CN115756491A (zh) | 基于二进制缓存的多代码编译方法及装置 | |
CN116820566A (zh) | 数据处理方法、装置、电子设备和存储介质 | |
CN116795867A (zh) | 数据处理方法、装置、电子设备和介质 | |
CN118656138A (zh) | 应用运行方法及相关设备 | |
CN116821158A (zh) | 结构化查询语句生成方法、装置、电子设备和存储介质 | |
CN115421858A (zh) | 一种前后台校验逻辑复用方法及相关设备 | |
CN114428615A (zh) | Css编译方法、样式更新方法、装置、介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230515 Address after: 200120, 29th to 33rd floors, China Construction Bank Building, No. 99 Yincheng Road, Pudong New Area Free Trade Pilot Zone, Shanghai Applicant after: CCB Life Insurance Co.,Ltd. Address before: 12 / F, 15 / F, No. 99, Yincheng Road, Shanghai pilot Free Trade Zone, 200120 Applicant before: Jianxin Financial Science and Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |