CN112685049B - 一种java字节码编译方法 - Google Patents
一种java字节码编译方法 Download PDFInfo
- Publication number
- CN112685049B CN112685049B CN202110086799.0A CN202110086799A CN112685049B CN 112685049 B CN112685049 B CN 112685049B CN 202110086799 A CN202110086799 A CN 202110086799A CN 112685049 B CN112685049 B CN 112685049B
- Authority
- CN
- China
- Prior art keywords
- compiling
- program
- lock
- byte code
- output
- 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
- 238000000034 method Methods 0.000 title claims abstract description 54
- 230000008569 process Effects 0.000 claims abstract description 18
- 230000006870 function Effects 0.000 claims abstract description 5
- 238000004458 analytical method Methods 0.000 claims description 27
- 230000001360 synchronised effect Effects 0.000 claims description 22
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000011161 development Methods 0.000 claims description 4
- 238000004040 coloring Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 claims description 3
- 239000003607 modifier Substances 0.000 claims description 3
- 238000012360 testing method Methods 0.000 claims description 3
- 238000013500 data storage Methods 0.000 claims description 2
- 230000003993 interaction Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- 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
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种JAVA字节码编译方法,包括以下步骤;步骤一、采用直接生成Runtime对象,并通过Runtime对象生成调用命令的相关进程;步骤二、通过调用相关方法进行编译操作,编译过程如果发现错误则返回错误信息,如果编译成功则继续调用相关方法进行运行操作,并返回运行结果;步骤三、创建了两个输入流,一个用于连接运行结果输出,另一个用于连接错误信息输出,程序正确执行时会输出运行结果,程序执行失败时会输出错误信息,并合并到一个字符串对象中一同处理。本发明在服务器端实现了源程序文档管理、后台编译和前后台信息交互的功能,提供稳定的在线编译,通过对并行程序内部结构进行重构,从而增强并行程序的可维护性和可理解性。
Description
技术领域
本发明涉及软件工程技术领域,具体为一种JAVA字节码编译方法。
背景技术
随着互联网的普及,互联网用户的急速增长,IT行业的用户需求也呈现爆炸式的增长,计算机编程语言有几千种,虽然都有各自的优点和特性;但它们编写的代码都存在两个问题:跨语言重用性差和跨平台重用性差,Java语言已经应用到各种应用程序的编程中,卡内芯片系统由Java语言来编写的智能卡又称为Java卡,Java卡中包括由Java源代码编译后的Java字节码和由C程序编写的虚拟机,虚拟机用来对Java字节码进行解析并执行;
目前已有的编译器有多种不同的实现类型,各种类型也都存在一些不足,主要表现在:界面不简洁,支持编程语言种类少;传统的物理服务器在部署、资源分配、可靠性等的不足与限制,从而导致可维护性和可理解性较差,鉴于此,提出一种JAVA字节码编译方法。
发明内容
本发明的目的在于提供一种JAVA字节码编译方法,以解决上述背景技术中提出的可维护性和可理解性较差的问题。
为实现上述目的,本发明提供如下技术方案:一种JAVA字节码编译方法,包括以下步骤;
步骤一、采用直接生成Runtime对象,并通过Runtime对象生成调用命令的相关进程;
步骤二、通过调用相关方法进行编译操作,编译过程如果发现错误则返回错误信息,如果编译成功则继续调用相关方法进行运行操作,并返回运行结果;
步骤三、创建了两个输入流,一个用于连接运行结果输出,另一个用于连接错误信息输出,程序正确执行时会输出运行结果,程序执行失败时会输出错误信息,并合并到一个字符串对象中一同处理;
步骤四、在Web页面上编辑程序,直接在页面代码中集成CodeMirror的代码编辑器组件;
步骤五、使用Bootstrap前端开发框架,实现响应式布局,使得用户注册、登录,源代码编辑等各个页面都能够有效适配手机、平板等各种移动终端设备和PC等桌面终端设备;
步骤六、以使用同步锁的JAVA字节码文件作为输入,输出使用可重入锁或读写锁的字节码文件;
步骤七、采用Quad作为中间表示形式,分别使用Joeq编译器和javassist作为字节码的分析和转换框架;
步骤八、对程序分析阶段已经遍历过的每一个指令检查其出现的次序,确保与字节码中锁的出现顺序一致,使用javassist字节码转换框架完成字节码重构。
优选的,步骤一中,所述命令为complie命令或run命令。
优选的,调用所述complie命令或run命令时,需要判断服务器端操作系统的类型,然后根据类型构建相应的编译命令行和运行命令行。
优选的,步骤四中,所述CodeMirror实现的通用文本编辑器,能实现高级编辑功能的语言模式和插件,包括代码自动补齐、代码着色、代码折叠、快捷键绑定。
优选的,步骤六中,中间过程为:
S1、将字节码中间表示形式转换为其它中间表示形式;
S2、采用访问者模式分析,对程序中使用锁的代码进行遍历;
S3、在面向可重入锁重构的基础上,采用负面效应分析实现面向读写锁重构的分析工作,决定使用读锁还是写锁,分析完毕后产生分析输出;
S4、对分析输出进行一致性检验,产生分析结果,分析结果将作为程序转换的依据;
S5、将分析结果和字节码文件作为输入,经过字节码转换,得到输出。
优选的,步骤七中,所述Quad是Joeq编译器中使用的中间表示形式,使用寄存器作为数据的存储结构,Quad指令使用控制流的方式进行组织。
优选的,所述Quad可以保留程序中属性访问和虚方法调用的相关信息外,还可以保存程序的本地变量和临时变量信息。
优选的,步骤八中,使用javassist字节码转换框架完成字节码重构过程为:
S1、向类中增加属性;
S2、将同步锁中的synchronized关键字替换为可重入锁或读写锁的lock和unlock操作。
优选的,S1中,向类中增加属性的过程为:锁属性名已经表明锁需要在哪个中定义,找到该类在类中对其进行定义即可,该操作是通过继承javsssist中的类javsssist.expr.ExprEditor并重写其edit方法来实现。
优选的,S2中,由于同步块和同步方法的使用方式不同,因此分别进行重构;
A1、对于同步块,将moni-torenter和monitorexit替换为锁的加锁和解锁操作;
A2、对于同步方法,去掉了synchronized修饰符,并在方法之前和之后加入加锁和解锁操作,并加入异常捕获语句,以确保异常发生时解锁操作会被执行。
本发明提出的一种JAVA字节码编译方法,有益效果在于:
1、本发明在前端页面实现了设备适配,允许用户通过各种网络终端设备访问,在服务器端实现了源程序文档管理、后台编译和前后台信息交互的功能,提供稳定的在线编译;
2、本发明将软件重构和并行程序设计技术相结合,有利于并行程序的设计和优化,借助并行编程语言或并行库可以将原有的串行程序重构为并行程序,提高软件内部的并发程度来提高程序的性能,对并行程序内部影响程序性能的因素进行重构,以进一步优化程序的性能,通过对并行程序内部结构进行重构,从而增强并行程序的可维护性和可理解性。
附图说明
图1为本发明所述一种JAVA字节码编译方法的中间过程步骤示意图;
图2为本发明所述一种JAVA字节码编译方法的字节码重构过程步骤示意图;
图3为本发明所述一种JAVA字节码编译方法的同步块和同步方法重构过程步骤示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-3,本发明提供一种技术方案:一种JAVA字节码编译方法,包括以下步骤;
步骤一、采用直接生成Runtime对象,并通过Runtime对象生成调用命令的相关进程;
命令为complie命令或run命令;
调用complie命令或run命令时,需要判断服务器端操作系统的类型,然后根据类型构建相应的编译命令行和运行命令行;
步骤二、通过调用相关方法进行编译操作,编译过程如果发现错误则返回错误信息,如果编译成功则继续调用相关方法进行运行操作,并返回运行结果;
步骤三、创建了两个输入流,一个用于连接运行结果输出,另一个用于连接错误信息输出,程序正确执行时会输出运行结果,程序执行失败时会输出错误信息,并合并到一个字符串对象中一同处理;
在运行编译命令时,如果程序没有语法问题,不会有任何信息输出,输入流不会捕捉到任何信息;如果程序有语法问题,会输出编译错误或警告信息,输入流也会捕捉到错误或警告信息;
步骤四、在Web页面上编辑程序,直接在页面代码中集成CodeMirror的代码编辑器组件;
CodeMirror实现的通用文本编辑器,能实现高级编辑功能的语言模式和插件,包括代码自动补齐、代码着色、代码折叠、快捷键绑定;
步骤五、使用Bootstrap前端开发框架,实现响应式布局,使得用户注册、登录,源代码编辑等各个页面都能够有效适配手机、平板等各种移动终端设备和PC等桌面终端设备;既能避免针对不同设备的重复开发,有效节约成本,又能确保显示的内容适应不同的平台和不同的设备;
步骤六、以使用同步锁的JAVA字节码文件作为输入,输出使用可重入锁或读写锁的字节码文件;
中间过程为:S1、将字节码中间表示形式转换为其它中间表示形式;S2、采用访问者模式分析,对程序中使用锁的代码进行遍历;S3、在面向可重入锁重构的基础上,采用负面效应分析实现面向读写锁重构的分析工作,决定使用读锁还是写锁,分析完毕后产生分析输出;S4、对分析输出进行一致性检验,产生分析结果,分析结果将作为程序转换的依据;S5、将分析结果和字节码文件作为输入,经过字节码转换,得到输出。
步骤七、采用Quad作为中间表示形式,分别使用Joeq编译器和javassist作为字节码的分析和转换框架;
Quad是Joeq编译器中使用的中间表示形式,使用寄存器作为数据的存储结构,Quad指令使用控制流的方式进行组织;
Quad可以保留程序中属性访问和虚方法调用的相关信息外,还可以保存程序的本地变量和临时变量信息;
步骤八、对程序分析阶段已经遍历过的每一个指令检查其出现的次序,确保与字节码中锁的出现顺序一致,使用javassist字节码转换框架完成字节码重构;
使用javassist字节码转换框架完成字节码重构过程为:S1、向类中增加属性;S2、将同步锁中的synchronized关键字替换为可重入锁或读写锁的lock和unlock操作;
向类中增加属性的过程为:锁属性名已经表明锁需要在哪个中定义,找到该类在类中对其进行定义即可,该操作是通过继承javsssist中的类javsssist.expr.ExprEditor并重写其edit方法来实现;
由于同步块和同步方法的使用方式不同,因此分别进行重构;A1、对于同步块,将moni-torenter和monitorexit替换为锁的加锁和解锁操作;A2、对于同步方法,去掉了synchronized修饰符,并在方法之前和之后加入加锁和解锁操作,并加入异常捕获语句,以确保异常发生时解锁操作会被执行。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (3)
1.一种JAVA字节码编译方法,其特征在于:包括以下步骤;
步骤一、采用直接生成Runtime对象,并通过Runtime对象生成调用命令的相关进程;
步骤二、通过调用相关方法进行编译操作,编译过程如果发现错误则返回错误信息,如果编译成功则继续调用相关方法进行运行操作,并返回运行结果;
步骤三、创建了两个输入流,一个用于连接运行结果输出,另一个用于连接错误信息输出,程序正确执行时会输出运行结果,程序执行失败时会输出错误信息,并合并到一个字符串对象中一同处理;
步骤四、在Web页面上编辑程序,直接在页面代码中集成CodeMirror的代码编辑器组件;
步骤五、使用Bootstrap前端开发框架,实现响应式布局,使得用户注册、登录,源代码编辑各个页面都能够有效适配手机、平板各种移动终端设备和PC桌面终端设备;
步骤六、以使用同步锁的JAVA字节码文件作为输入,输出使用可重入锁或读写锁的字节码文件;
步骤七、采用Quad作为中间表示形式,分别使用Joeq编译器和javassist作为字节码的分析和转换框架;
步骤八、对程序分析阶段已经遍历过的每一个指令检查其出现的次序,确保与字节码中锁的出现顺序一致,使用javassist字节码转换框架完成字节码重构;
所述命令为complie命令或run命令;
调用所述complie命令或run命令时,需要判断服务器端操作系统的类型,然后根据类型构建相应的编译命令行和运行命令行;
步骤四中,所述CodeMirror实现的通用文本编辑器,能实现高级编辑功能的语言模式和插件,包括代码自动补齐、代码着色、代码折叠、快捷键绑定;
步骤六中,中间过程为:
S1、将字节码中间表示形式转换为其它中间表示形式;
S2、采用访问者模式分析,对程序中使用锁的代码进行遍历;
S3、在面向可重入锁重构的基础上,采用负面效应分析实现面向读写锁重构的分析工作,决定使用读锁还是写锁,分析完毕后产生分析输出;
S4、对分析输出进行一致性检验,产生分析结果,分析结果将作为程序转换的依据;
S5、将分析结果和字节码文件作为输入,经过字节码转换,得到输出;
步骤八中,使用javassist字节码转换框架完成字节码重构过程为:
S1、向类中增加属性;
S2、将同步锁中的synchronized关键字替换为可重入锁或读写锁的lock和unlock操作;
S1中,向类中增加属性的过程为:锁属性名已经表明锁需要在哪个中定义,该操作是通过继承javsssist中的类javsssist.expr.ExprEditor并重写其edit方法来实现;
S2中,由于同步块和同步方法的使用方式不同,因此分别进行重构;
A1、对于同步块,将moni-torenter和monitorexit替换为锁的加锁和解锁操作;
A2、对于同步方法,去掉了synchronized修饰符,并在方法之前和之后加入加锁和解锁操作,并加入异常捕获语句,以确保异常发生时解锁操作会被执行。
2.根据权利要求1所述的一种JAVA字节码编译方法,其特征在于:步骤七中,所述Quad是Joeq编译器中使用的中间表示形式,使用寄存器作为数据的存储结构,Quad指令使用控制流的方式进行组织。
3.根据权利要求1所述的一种JAVA字节码编译方法,其特征在于:所述Quad能够保留程序中属性访问和虚方法调用的相关信息外,还能够保存程序的本地变量和临时变量信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110086799.0A CN112685049B (zh) | 2021-01-22 | 2021-01-22 | 一种java字节码编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110086799.0A CN112685049B (zh) | 2021-01-22 | 2021-01-22 | 一种java字节码编译方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112685049A CN112685049A (zh) | 2021-04-20 |
CN112685049B true CN112685049B (zh) | 2024-02-13 |
Family
ID=75458891
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110086799.0A Active CN112685049B (zh) | 2021-01-22 | 2021-01-22 | 一种java字节码编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112685049B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040230958A1 (en) * | 2003-05-14 | 2004-11-18 | Eyal Alaluf | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes |
CN102043932A (zh) * | 2010-12-31 | 2011-05-04 | 中国航空工业集团公司第六三一研究所 | 一种防止Java程序被反编译的方法 |
CN104536797A (zh) * | 2015-01-14 | 2015-04-22 | 大唐微电子技术有限公司 | 一种Java程序预编译方法和预编译器 |
CN107526625A (zh) * | 2017-07-18 | 2017-12-29 | 杭州趣链科技有限公司 | 一种基于字节码检查的Java智能合约安全检测方法 |
CN109460237A (zh) * | 2018-10-25 | 2019-03-12 | 北京顶象技术有限公司 | 代码的编译方法及装置 |
CN110569039A (zh) * | 2019-09-10 | 2019-12-13 | 浪潮软件股份有限公司 | 一种java在平台优化运行的方法 |
CN110990019A (zh) * | 2019-11-20 | 2020-04-10 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种Java类分析方法、装置、存储介质及电子设备 |
CN111190585A (zh) * | 2019-12-12 | 2020-05-22 | 杭州安恒信息技术股份有限公司 | 基于字节码增强技术实现java模式匹配特性的方法 |
CN111736916A (zh) * | 2020-06-08 | 2020-10-02 | 北京达佳互联信息技术有限公司 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
-
2021
- 2021-01-22 CN CN202110086799.0A patent/CN112685049B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040230958A1 (en) * | 2003-05-14 | 2004-11-18 | Eyal Alaluf | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes |
CN102043932A (zh) * | 2010-12-31 | 2011-05-04 | 中国航空工业集团公司第六三一研究所 | 一种防止Java程序被反编译的方法 |
CN104536797A (zh) * | 2015-01-14 | 2015-04-22 | 大唐微电子技术有限公司 | 一种Java程序预编译方法和预编译器 |
CN107526625A (zh) * | 2017-07-18 | 2017-12-29 | 杭州趣链科技有限公司 | 一种基于字节码检查的Java智能合约安全检测方法 |
CN109460237A (zh) * | 2018-10-25 | 2019-03-12 | 北京顶象技术有限公司 | 代码的编译方法及装置 |
CN110569039A (zh) * | 2019-09-10 | 2019-12-13 | 浪潮软件股份有限公司 | 一种java在平台优化运行的方法 |
CN110990019A (zh) * | 2019-11-20 | 2020-04-10 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种Java类分析方法、装置、存储介质及电子设备 |
CN111190585A (zh) * | 2019-12-12 | 2020-05-22 | 杭州安恒信息技术股份有限公司 | 基于字节码增强技术实现java模式匹配特性的方法 |
CN111736916A (zh) * | 2020-06-08 | 2020-10-02 | 北京达佳互联信息技术有限公司 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
基于Joeq编译器的软件分析及其应用;张扬;《河北师范大学学报》;第1-6页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112685049A (zh) | 2021-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8332828B2 (en) | System for translating diverse programming languages | |
US7162710B1 (en) | Dynamic modifications to a heterogeneous program in a distributed environment | |
US20140157243A1 (en) | System for Translating Diverse Programming Languages | |
US20150242194A1 (en) | System for Translating Diverse Programming Languages | |
WO2019005228A1 (en) | AUTOMATED ADAPTATION OF A SOURCE CODE IN ORDER TO INJECT FUNCTIONS BETWEEN VERSIONS OF A PLATFORM | |
US20170220613A1 (en) | Systems and methods for database orientation transformation | |
US10809985B2 (en) | Instrumenting program code | |
CN110795091B (zh) | 一种模块化路由解耦方法、存储介质、电子设备及系统 | |
CN102236544A (zh) | 一种皮肤设计方法及装置 | |
CN109063091A (zh) | 混合编码的数据迁移方法、数据迁移装置和存储介质 | |
CN104063231A (zh) | 一种基于hit-tena的试验资源快速接入方法 | |
CN112860584A (zh) | 基于工作流模型的测试方法及装置 | |
CN110110299B (zh) | 文本变换方法、装置以及服务器 | |
CN112685049B (zh) | 一种java字节码编译方法 | |
CN116755669A (zh) | 一种基于dsl语言操作模型的低代码开发方法和工具 | |
CN109491904B (zh) | 一种SparkSQL应用程序的自动化测试方法和装置 | |
CN113641594B (zh) | 跨端自动化测试方法以及相关装置 | |
CN114911541A (zh) | 配置信息的处理方法、装置、电子设备及存储介质 | |
CN110737431B (zh) | 软件开发方法、开发平台、终端设备及存储介质 | |
CN114579141A (zh) | require框架转化为VUE框架的方法及装置 | |
CN114816972A (zh) | 着色语言的测试方法、装置、电子设备以及存储介质 | |
Scherer | Hands-on JavaScript High Performance: Build Faster Web Apps Using Node. js, Svelte. js, and WebAssembly | |
CN112328241B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN112394912B (zh) | 一种基于ros计算图的机器人应用数据动态提取方法 | |
Rodrigues et al. | Aspect-Oriented Webassembly Transformation |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |