技术领域
[0001] 本
发明公开一种JAVA在平台优化运行的方法,涉及计算机技术领域。
背景技术
[0002] JAVA是一种跨平台语言,使用范围较广。JAVA的特性实现了跨平台,与平台无关的字节码可在多种平台上由JVM解释执行,但问题是性能慢,并可从字节码比较容易地反汇编出源代码,系统不安全。
[0003] 现有的方式,平台运行JAVA时,利用高版本的oracle JDK提供的Hotspot JVM提供了JIT(Just In Time)编译器,动态编译器,在程序运行时,JIT通过预热将热点代码转换为机器码,将编译过程的字节码缓存在codeCache中,而这种情况下,部分热点代码是编译执行而不是解释执行,虽然JIT部分提升了JAVA程序的运行性能,但需要加载时编译,仍然消耗时间长,代码安全问题也并未解决。
[0004] 另外oracle JDK9提出了一种新的编译方式即AOT(ahead-of-time complication),直接将字节码编译成机器码,避免了JIT等方面的预热消耗,但是aot编译出的代码是静态的,性能虽有较大提升,但程序运行时仍然需要依赖JAVA及.class文件,运行时仍然需要依赖原有的HelloWorld.class文件,代码安全性问题仍未解决。
[0005] 而本发明是公开一种JAVA在平台优化运行的方法,将JAVA通用的字节码.class文件直接编译成与C/C++程序生成一样的机器码,包括可执行JAVA程序及动态库,JAVA程序可在
操作系统下直接运行,不需依赖第三方程序,既解决了JAVA程序的性能问题又解决了代码安全问题,还方便与C/C++语言的集成。
发明内容
[0006] 本发明针对
现有技术的问题,提供一种JAVA在平台优化运行的方法,具有通用性强、实施简便等特点,具有广阔的应用前景。
[0007] 本发明提出的具体方案是:
[0008] 一种JAVA在平台优化运行的方法,将JAVA通用的.class文件中的字节码进行预编译分析字节码文件结构,再进行编译生成汇编码.s文件,将汇编码.s文件汇编生成组织格式为.o文件的目标代码文件,目标代码文件之间通过链接确认互相依赖关系,生成在平台运行的机器码,用于执行JAVA及相应动态库。
[0009] 所述的方法中将JAVA的main方法的字节码文件生成直接运行的机器码,把其它字节码文件分别生成动态库。
[0010] 所述的方法中通过词法分析、句法分析和语义分析将字节码编译生成汇编码.s文件。
[0011] 所述的方法中利用gcc编译器对字节码进行预编译、编译及汇编。
[0012] 一种JAVA在平台运行的优化工具包括优化单元,
[0013] 优化单元将JAVA通用的.class文件中的字节码进行预编译分析字节码文件结构,再进行编译生成汇编码.s文件,将汇编码.s文件汇编生成组织格式为.o文件的目标代码文件,目标代码文件之间通过链接确认互相依赖关系,生成在平台运行的机器码,用于执行JAVA及相应动态库。
[0014] 所述的优化工具中优化单元将JAVA的main方法的字节码文件生成直接运行的机器码,把其它字节码文件分别生成动态库。
[0015] 所述的优化工具中优化单元通过词法分析、句法分析和语义分析将字节码编译生成汇编码.s文件。
[0016] 所述的优化工具中优化单元利用gcc编译器对字节码进行预编译、编译及汇编。
[0017] 本发明的有益之处是:
[0018] 本发明提供一种JAVA在平台优化运行的方法,在字节码编译阶段混入.s文件中,将JAVA的动态调用转化为C的动态调用,而且JAVA的字节码生成在平台可直接运行的机器码,平台通过动态库使C/C++语言更容易调用JAVA程序,性能方面远比JAVA字节码解释运行快得多,同时解决了JAVA
语言代码安全问题,生成的机器码不依赖于第三方特定程序就能执行,还方便与C/C++语言的集成。
附图说明
[0019] 图1是本发明方法流程示意图。
具体实施方式
[0020] 本发明提供一种JAVA在平台优化运行的方法,将JAVA通用的.class文件中的字节码进行预编译分析字节码文件结构,再进行编译生成汇编码.s文件,将汇编码.s文件汇编生成组织格式为.o文件的目标代码文件,目标代码文件之间通过链接确认互相依赖关系,生成在平台运行的机器码,用于执行JAVA及相应动态库。
[0021] 同时提供与上述方法相应的一种JAVA在平台运行的优化工具包括优化单元,[0022] 优化单元将JAVA通用的.class文件中的字节码进行预编译分析字节码文件结构,再进行编译生成汇编码.s文件,将汇编码.s文件汇编生成组织格式为.o文件的目标代码文件,目标代码文件之间通过链接确认互相依赖关系,生成在平台运行的机器码,用于执行JAVA及相应动态库。
[0023] 下面结合附图和具体
实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
[0024] 利用本发明方法,将JAVA通用的.class文件中的字节码进行预编译、编译、汇编、链接,生成与平台相关的高性能机器码可执行程序,
[0025] 其中预编译阶段通过预读整个字节码文件,初步分析字节码文件结构,再利用词法分析、句法分析和语义分析方法进行编译生成汇编码.s文件,汇编阶段把汇编码.s文件转为机器语言并进行相应优化,将汇编码.s文件汇编生成组织格式为.o文件的目标代码文件,目标代码文件之间通过链接确认互相依赖关系,生成最终的可在操作系统下直接运行的机器码可执行程序及相应动态库。
[0026] 在上述过程中,把JAVA含有main方法的字节码文件生成直接运行的机器码可执行程序,把其它字节码文件分别生成一个个动态库,动态库均可被C/C++等其它语言调用,相比JAVA的JNI,通过动态库使C/C++语言更容易调用JAVA程序,
[0027] 在上述过程中,可利用gcc编译器对字节码进行预编译、编译及汇编,以及相应的目标代码文件之间通过链接确认互相依赖关系,生成在平台运行的机器码,用于执行JAVA及相应动态库。
[0028] 上述过程中在字节码编译阶段混入.s文件中,将JAVA的动态调用转化为C的动态调用,可用于Linux平台,也可用于Unix、Windows等平台,针对不同类型的CPU可使用不同版本的编译器。
[0029] 同样,利用本发明优化工具进行JAVA在平台优化运行时,优化单元将JAVA通用的.class文件中的字节码进行预编译、编译、汇编、链接,生成与平台相关的高性能机器码可执行程序,
[0030] 其中优化单元在预编译阶段通过预读整个字节码文件,初步分析字节码文件结构,再利用词法分析、句法分析和语义分析方法进行编译生成汇编码.s文件,汇编阶段把汇编码.s文件转为机器语言并进行相应优化,将汇编码.s文件汇编生成组织格式为.o文件的目标代码文件,目标代码文件之间通过链接确认互相依赖关系,生成最终的可在操作系统下直接运行的机器码可执行程序及相应动态库。
[0031] 在上述过程中,优化单元把JAVA含有main方法的字节码文件生成直接运行的机器码可执行程序,把其它字节码文件分别生成一个个动态库,动态库均可被C/C++等其它语言调用,相比JAVA的JNI,通过动态库使C/C++语言更容易调用JAVA程序,
[0032] 在上述过程中,优化单元可利用gcc编译器对字节码进行预编译、编译及汇编,以及相应的目标代码文件之间通过链接确认互相依赖关系,生成在平台运行的机器码,用于执行JAVA及相应动态库。
[0033] 上述过程中优化单元在编译阶段将字节码混入.s文件中,将JAVA的动态调用转化为C的动态调用,可用于Linux平台,也可用于Unix、Windows等平台,针对不同类型的CPU可使用不同版本的编译器。
[0034] 以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。
本技术领域的技术人员在本发明
基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以
权利要求书为准。