CN112346778A - 一种Java程序编译时自动生成字节码的优化方法 - Google Patents
一种Java程序编译时自动生成字节码的优化方法 Download PDFInfo
- Publication number
- CN112346778A CN112346778A CN202011169124.4A CN202011169124A CN112346778A CN 112346778 A CN112346778 A CN 112346778A CN 202011169124 A CN202011169124 A CN 202011169124A CN 112346778 A CN112346778 A CN 112346778A
- Authority
- CN
- China
- Prior art keywords
- annotation
- java
- aop
- class
- byte code
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- 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
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种Java程序编译时自动生成字节码的优化方法,包括自定义注解、AOP、Javac以及JVM,Java源码通过Javac编译成JVM的字节码文件;自定义注解用来表示哪个Java源文件需要新增什么样的字节码;AOP用于对自定义注解进行拦截;Javac用于分析源代码并生成一棵抽象的字节码语法树;JVM用于给字节码文件增加新的节点;自定义注解和AOP打包后引入到需要的项目工程中,并在需要生成公用字节码的类中加入自定义注解的注解。本发明的一种Java程序编译时自动生成字节码的优化方法利用JVM加载字节码的特性,在Java编译期自动生成公用的字节码,以避免大量的重复编码工作。
Description
技术领域
本发明涉及计算机的技术领域,尤其是一种Java程序编译时自动生成字节码的优化方法。
背景技术
工业物联网将具有感知、监控能力的各类采集、控制传感器或控制器以及移动通信、智能分析等技术不断融入到工业生产过程各个环节,从而大幅提高制造效率,改善产品质量,降低产品成本和资源消耗,最终实现将传统工业提升到智能化的新阶段。从应用形式上,工业物联网的应用具有实时性、自动化、嵌入式(软件)、安全性和信息互通互联性等特点。
然而,在工业物联网场景中,Java的源文件在一个服务中往往会很多,而这些源文件中又会有很多重复的内容,进而产生大量的重复编码工作。
发明内容
本发明要解决的技术问题是:为了克服现有技术中存在的不足,提供一种Java程序编译时自动生成字节码的优化方法,利用JVM加载字节码的特性,在Java编译期自动生成公用的字节码,以避免大量的重复编码工作。
本发明解决其技术问题所采用的技术方案是:一种Java程序编译时自动生成字节码的优化方法,包括自定义注解、AOP、Javac以及JVM,Java源码通过所述的Javac编译成JVM的字节码文件;
所述的自定义注解用来表示哪个Java源文件需要新增什么样的字节码;
所述的AOP用于对自定义注解进行拦截;
所述的Javac用于分析源代码并生成一棵抽象的字节码语法树;
所述的JVM用于给字节码文件增加新的节点;
自定义注解和AOP打包后引入到需要的项目工程中,并在需要生成公用字节码的类中加入自定义注解的注解。
进一步具体地说,上述技术方案中,所述的AOP包括声明切面、连接点以及通知。
进一步具体地说,上述技术方案中,所述的通知中对自定义注解进行拦截,解析到自定义注解的注解时要实现自动生成类构造方法的字节码。
进一步具体地说,上述技术方案中,所述的AOP找到自定义注解的注解类,利用Java的反射机制获取类中的所有的属性,然后为这个类编写带有所有属性的构造方法。
进一步具体地说,上述技术方案中,所述的JVM找到注解所在类后把类的构造方法插入到字节码语法树的结构中,Javac使用修改后的字节码语法树生成字节码文件。
进一步具体地说,上述技术方案中,所述的自定义注解和AOP打包成jar的方式,在需要的项目工程中引入jar包,在需要生成构造方法的类中加入自定义注解的注解。
进一步具体地说,上述技术方案中,所述的自定义注解为@Constructor。
进一步具体地说,上述技术方案中,所述的自定义注解的注解接口类声明为@Retentionpublic@interfaceConstructor{}。
进一步具体地说,上述技术方案中,所述的@Retention的类型需要声明为编译时解析RetentionPolicy.SOURCE。
本发明的有益效果是:本发明提供的一种Java程序编译时自动生成字节码的优化方法具有以下优点:
一、通过采用@Retention(RetentionPolicy.SOURCE)的注解方式告诉Javac指令哪些类是需要编译期插入字节码的;
二、通过自定义注解和AOP的方式找到哪些类需要动态插入字节码和生成怎样功能的字节码;
三、通过采用修改类的字节码语法树实现编译期动态添加代码块。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的原理图;
图2是Javac编译和JVM加载的原理图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
见图1和图2,本发明的一种Java程序编译时自动生成字节码的优化方法,包括自定义注解、AOP、Javac以及JVM。
其中,自定义注解可以修饰程序中的类、方法、变量、接口等,自定义注解通常放在所有修饰符之前。
AOP为AspectOrientedProgramming的缩写,意为面向切面编程,通过预编译方式和运行期间动态代理,实现程序功能的统一维护,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
Javac是Java语言编程编译器,全称为Javacompiler,Javac可以隐式编译一些没有在命令行中提及的源文件,当编译源文件时,编译器常常需要它还没有识别出的类型的有关信息,对于源文件中使用、扩展或实现的每个类或接口,编译器都需要其类型信息。
JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的,引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译,Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Java源码通过Javac编译成JVM的字节码文件。
自定义注解用来表示哪个Java源文件需要新增什么样的字节码。
注解是根据具体的业务需求定义,主要解决那些公用的重复的编码,可以有n种,如:格式化类中属性为json格式;对私有属性提供的getset方法等。
如:自定义注解为@Constructor。
@Constructor仅是举例说明如何在编译期生成字节码,这些字节码原本是需要手动编码的,如果要实现其他的基于自动生成字节码的功能,可以进行灵活扩展。
AOP(定义切面)用于对自定义注解进行拦截。
Javac编译用于分析源代码并生成一棵抽象的字节码语法树(AST)。
JVM加载用于给字节码文件(class)增加新的节点。
自定义注解和AOP打包后引入到需要的项目工程中,并在需要生成公用字节码的类中加入自定义注解的注解。
AOP包括声明切面(Aspect)、连接点(Joinpoint)以及通知(Advice)。声明切面(Aspect)的具体作用是:处理解析自定义注解的类。
连接点(Joinpoint)的具体作用是:有什么样特征的类或方法可以进入切面,就是带有自定义注解的类,就会进行拦截。
通知(Advice)是切面这个类中一个方法,具体解析并处理自定义注解所要实现的功能,通知(Advice)的具体作用是:对自定义注解(@Constructor)进行拦截,解析到自定义注解(@Constructor)的注解时要实现自动生成类构造方法的字节码。
AOP找到带有@Constructor的注解类,利用Java的反射机制获取类中的所有的属性,然后为这个类编写带有所有属性的构造方法。
JVM加载找到注解所在类后,把类的构造方法(以后不用再编码的公共代码)插入到字节码语法树(AST)的结构中,Javac使用修改后的字节码语法树(AST)生成字节码文件,即给class增加新的节点(代码块)。
该优化方法的具体使用方式是:
一、把自定义注解和AOP打包成jar的方式;
二、在需要的项目工程中引入jar包;
三、在需要生成构造方法的类中加入自定义注解(@Constructor)的注解。
自定义注解的注解接口类声明为@Retention(RetentionPolicy.SOURCE)public@interfaceConstructor{}。@Retention的类型需要声明为编译时解析RetentionPolicy.SOURCE。
本发明中设计Java程序编译时自动生成字节码,Java语言一次编译到处运行这种强大的与操作系统的无关性很大程度上得益于Java的虚拟机JVM,将Java源码(.Java文件)通过编译器(Javac)编译成JVM的字节码文件(.class文件),利用JVM加载字节码的特性,在Java编译期自动生成公用的字节码,以避免大量的重复编码工作。
本发明通过采用@Retention(RetentionPolicy.SOURCE)的注解方式告诉Javac指令哪些类是需要编译期插入字节码的;通过自定义注解和AOP的方式找到哪些类需要动态插入字节码和生成怎样功能的字节码;通过采用修改类的字节码语法树实现编译期动态添加代码块。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (9)
1.一种Java程序编译时自动生成字节码的优化方法,其特征在于:包括自定义注解、AOP、Javac以及JVM,Java源码通过所述的Javac编译成JVM的字节码文件;
所述的自定义注解用来表示哪个Java源文件需要新增什么样的字节码;
所述的AOP用于对自定义注解进行拦截;
所述的Javac用于分析源代码并生成一棵抽象的字节码语法树;
所述的JVM用于给字节码文件增加新的节点;
自定义注解和AOP打包后引入到需要的项目工程中,并在需要生成公用字节码的类中加入自定义注解的注解。
2.根据权利要求1所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的AOP包括声明切面、连接点以及通知。
3.根据权利要求2所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的通知中对自定义注解进行拦截,解析到自定义注解的注解时要实现自动生成类构造方法的字节码。
4.根据权利要求1或2或3所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的AOP找到自定义注解的注解类,利用Java的反射机制获取类中的所有的属性,然后为这个类编写带有所有属性的构造方法。
5.根据权利要求4所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的JVM找到注解所在类后把类的构造方法插入到字节码语法树的结构中,Javac使用修改后的字节码语法树生成字节码文件。
6.根据权利要求5所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的自定义注解和AOP打包成jar的方式,在需要的项目工程中引入jar包,在需要生成构造方法的类中加入自定义注解的注解。
7.根据权利要求6所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的自定义注解为@Constructor。
8.根据权利要求7所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的自定义注解的注解接口类声明为@Retention public@interface Constructor{}。
9.根据权利要求8所述的一种Java程序编译时自动生成字节码的优化方法,其特征在于:所述的@Retention的类型需要声明为编译时解析RetentionPolicy.SOURCE。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011169124.4A CN112346778B (zh) | 2020-10-28 | 2020-10-28 | 一种Java程序编译时自动生成字节码的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011169124.4A CN112346778B (zh) | 2020-10-28 | 2020-10-28 | 一种Java程序编译时自动生成字节码的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112346778A true CN112346778A (zh) | 2021-02-09 |
CN112346778B CN112346778B (zh) | 2022-02-08 |
Family
ID=74358477
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011169124.4A Active CN112346778B (zh) | 2020-10-28 | 2020-10-28 | 一种Java程序编译时自动生成字节码的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112346778B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024045379A1 (zh) * | 2022-08-31 | 2024-03-07 | 蚂蚁区块链科技(上海)有限公司 | 编译方法和编译器、Wasm虚拟机 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104182267A (zh) * | 2013-05-21 | 2014-12-03 | 中兴通讯股份有限公司 | 编译方法、解释方法、装置及用户设备 |
CN105630463A (zh) * | 2014-10-28 | 2016-06-01 | 阿里巴巴集团控股有限公司 | 用于检测jar包冲突的方法及装置 |
CN108196833A (zh) * | 2018-01-09 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | Aop代理框架的实现方法、存储介质、电子设备及系统 |
CN109144534A (zh) * | 2017-06-28 | 2019-01-04 | 北京京东尚科信息技术有限公司 | 服务模块动态更新方法、装置及电子设备 |
US20190146764A1 (en) * | 2017-11-10 | 2019-05-16 | International Business Machines Corporation | Using comments of a program to provide optimizations |
CN110275713A (zh) * | 2019-07-02 | 2019-09-24 | 四川长虹电器股份有限公司 | 一种Java虚拟机后端编译的改进方法 |
CN110413269A (zh) * | 2019-06-18 | 2019-11-05 | 深圳壹账通智能科技有限公司 | 接口编码方法、服务器及计算机可读存储介质 |
CN110716715A (zh) * | 2019-10-18 | 2020-01-21 | 恒生电子股份有限公司 | 一种应用程序开发方法、装置、设备及介质 |
CN110764770A (zh) * | 2018-07-27 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 一种对象间转换与赋值的方法和装置 |
CN111367510A (zh) * | 2020-02-24 | 2020-07-03 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种安卓功能模块开发的方法及装置 |
CN111399842A (zh) * | 2020-03-10 | 2020-07-10 | 北京奇艺世纪科技有限公司 | 一种代码编译方法及装置 |
-
2020
- 2020-10-28 CN CN202011169124.4A patent/CN112346778B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104182267A (zh) * | 2013-05-21 | 2014-12-03 | 中兴通讯股份有限公司 | 编译方法、解释方法、装置及用户设备 |
CN105630463A (zh) * | 2014-10-28 | 2016-06-01 | 阿里巴巴集团控股有限公司 | 用于检测jar包冲突的方法及装置 |
CN109144534A (zh) * | 2017-06-28 | 2019-01-04 | 北京京东尚科信息技术有限公司 | 服务模块动态更新方法、装置及电子设备 |
US20190146764A1 (en) * | 2017-11-10 | 2019-05-16 | International Business Machines Corporation | Using comments of a program to provide optimizations |
CN108196833A (zh) * | 2018-01-09 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | Aop代理框架的实现方法、存储介质、电子设备及系统 |
CN110764770A (zh) * | 2018-07-27 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 一种对象间转换与赋值的方法和装置 |
CN110413269A (zh) * | 2019-06-18 | 2019-11-05 | 深圳壹账通智能科技有限公司 | 接口编码方法、服务器及计算机可读存储介质 |
CN110275713A (zh) * | 2019-07-02 | 2019-09-24 | 四川长虹电器股份有限公司 | 一种Java虚拟机后端编译的改进方法 |
CN110716715A (zh) * | 2019-10-18 | 2020-01-21 | 恒生电子股份有限公司 | 一种应用程序开发方法、装置、设备及介质 |
CN111367510A (zh) * | 2020-02-24 | 2020-07-03 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种安卓功能模块开发的方法及装置 |
CN111399842A (zh) * | 2020-03-10 | 2020-07-10 | 北京奇艺世纪科技有限公司 | 一种代码编译方法及装置 |
Non-Patent Citations (4)
Title |
---|
DUANXZ: "JVM插庄之一:JVM字节码增强技术介绍及入门示例", 《HTTPS://WWW.CNBLOGS.COM/DUANXZ/P/4964318.HTML》 * |
WEIXIN_34344403: "AOP 最后一块拼图 | AST 抽象语法树 —— 最轻量级的AOP方法", 《HTTPS://BLOG.CSDN.NET/WEIXIN_34344403/ARTICLE/DETAILS/88008185》 * |
YUAN ZHANG等: "Swift: a register-based JIT compiler for embedded JVMs", 《VEE "12: PROCEEDINGS OF THE 8TH ACM SIGPLAN/SIGOPS CONFERENCE ON VIRTUAL EXECUTION ENVIRONMENTSMARCH 2012》 * |
陶胜召 等: "基于Trace的CMinus语言即时编译技术", 《计算机应用与软件》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024045379A1 (zh) * | 2022-08-31 | 2024-03-07 | 蚂蚁区块链科技(上海)有限公司 | 编译方法和编译器、Wasm虚拟机 |
Also Published As
Publication number | Publication date |
---|---|
CN112346778B (zh) | 2022-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
US5884083A (en) | Computer system to compile non-incremental computer source code to execute within an incremental type computer system | |
EP3134808B1 (en) | Metadata-driven dynamic specialization | |
US20170228223A1 (en) | Unified data type system and method | |
US7627594B2 (en) | Runtime support for nullable types | |
CN107526625B (zh) | 一种基于字节码检查的Java智能合约安全检测方法 | |
US20110191752A1 (en) | Method and System for Debugging of Software on Target Devices | |
CN111736954B (zh) | 多智能合约虚拟机实现方法、多智能合约虚拟机及系统 | |
US20150012912A1 (en) | Interpreter-based program language translator using embedded interpreter types and variables | |
US20110252409A1 (en) | Methods and systems to implement non-abi conforming features across unseen interfaces | |
US9753705B2 (en) | Conditional compilation of bytecode | |
JPH0561683A (ja) | オブジエクトに基づく情報処理システム及びソフトウエア保守システム | |
US20160246622A1 (en) | Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages | |
US20120331445A1 (en) | Unchanged Object Management | |
CN112346778B (zh) | 一种Java程序编译时自动生成字节码的优化方法 | |
CN111610974A (zh) | 一种面向边缘计算的跨系统平台编译方法 | |
Soroker et al. | Extension mechanisms in Montana | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
Erhardt et al. | Exploiting static application knowledge in a Java compiler for embedded systems: A case study | |
CN116301836A (zh) | 一种基于国产自主可控环境的嵌入式开发系统 | |
EP4196874A1 (en) | Representing asynchronous state machine in intermediate code | |
US20020073133A1 (en) | Register allocation method and software development method for various execution environments and LSI for executing developed software | |
EP3534252A1 (en) | Method and system for providing a processing device with executable machine code | |
Nadera et al. | The varying faces of a program transformation systems | |
CN117235746B (zh) | 一种基于多维ast融合检测的源代码安全管控平台 |
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 |