一种Java虚拟机后端编译的改进方法与流程

文档序号:18755022发布日期:2019-09-24 22:06阅读:362来源:国知局
一种Java虚拟机后端编译的改进方法与流程
本发明涉及计算机软件
技术领域
,具体的说,是一种java虚拟机后端编译的改进方法。
背景技术
:软件系统已经运用到社会生产的各行各业,软件行业中java开发语言占比比较大,小到个人手机平板电脑,大到航天航空领域,都用到java作为软件开发语言。java通过牺牲运行性能和一些本地化特性的方式获得了跨平台的特性,做到一次编写,多平台运行,方便了软件开发。java程序在各个方面做了优化,编译方面分为前端编译器和后端编译器,前端侧重词法分析、语法分析和语义分析。后端侧重对字节码进行优化,使java语言开发的程序能尽可能贴近本地系统运行速度。后端编译优化有即时编译和静态编译。两种编译方式主要缺陷在于,即时编译是针对热点代码进行编译,在编译的过程中比较消耗计算资源,会在一定程度上影响运算速度。而静态编译的时间较长,影响程序的启动速度。因此针对如上情况提出在代码层面对代码进行标注。将重点代码段标注为需要编译为本地机器代码。java程序在运行之前就能确定哪些代码为需要进行优化的部分。java编译器即可把特定代码段编译为本地机器码,可以直接在内存中进行运行,而不用再在java虚拟机中进行运行。从而减轻jvm负载。重点代码段主要针对的是与客户紧密相关的逻辑。每个人对系统反应时间的忍耐程度不同。普通客户要求的是最短时间响应,系统响应时间过长容易造成客户流失,对公司营收带来影响。技术实现要素:本发明的目的在于提供一种java虚拟机后端编译的改进方法,用于解决现有技术中系统响应时间长导致用户难以忍受而致使用户流失的问题。本发明通过下述技术方案解决上述问题:一种java虚拟机后端编译的改进方法,所述方法包括如下步骤:步骤1:对java程序的源代码进行标注,在需要进行本地编译的方法头部增@nativecompile加注解;步骤2:对加注解的代码进行编译,进行词法分析,词法分析没问题后进行语法分析,再进行语意分析,语义分析完成后进行字节码生成,将生成的字节码保存到文件系统中;步骤3:运行java程序,编译器通过获取虚拟机运行情况,根据计算资源判断是否需要开启本地编译。通过本方法,jvm后端编译有针对性的代码逻辑进行优化,在jvm后端编译中对特定标识进行判断,若有标志性字段的方法,则启动实时编译,将代码进行本地化编译,让程序直接运行在本地计算机上,而不是虚拟机上。这样可以提高特定方法的执行效率。同时避免其他不相关逻辑影响执行速度。在通用优化的方面进行进一步优化,有助于提升执行效率。进一步地,在字节码第一次加载到虚拟机中时对当前环境进行判断,若当前环境可用计算资源不足则不编译,在虚拟机资源充足的情况下再进行编译。进一步地,编译时前端编译器对java源码编译成字节码后,后端编译器先对源码进行常规的优化如公共子表达式消除、数组范围消除、方法内联和逃逸分析,完成后再将字节码编译为本地方法。本发明与现有技术相比,具有以下优点及有益效果:(1)本发明使用了本方式进行后端优化编译后,能明显加快编译速度和执行速度,用户端能得到很好的用户体验。避免了静态编译和jit及时编译带来的启动问题和编译占用资源等问题。(2)本发明在虚拟机后端编译有针对性的代码逻辑进行优化,在虚拟机后端编译中对特定标识进行判断,若有标志性字段的方法,则启动实时编译,将代码进行本地化编译,让程序直接运行在本地计算机上,而不是虚拟机上,可避免其他不相关逻辑影响执行速度。附图说明图1为本发明的java代码编译过程示意图。具体实施方式下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。实施例1:结合附图1所示,一种java虚拟机后端编译的改进方法,所述方法包括如下步骤:步骤1:对java程序的源代码进行标注,在需要进行本地编译的方法头部增@nativecompile加注解;步骤2:对加注解的代码进行编译,进行词法分析,词法分析没问题后进行语法分析,再进行语意分析,语义分析完成后进行字节码生成,将生成的字节码保存到文件系统中,在字节码第一次加载到虚拟机中时对当前环境进行判断,若当前环境可用计算资源不足则不编译,在虚拟机资源充足的情况下再进行编译;步骤3:运行java程序,编译器通过获取虚拟机运行情况,根据计算资源判断是否需要开启本地编译,编译时前端编译器对java源码编译成字节码后,后端编译器先对源码进行常规的优化如公共子表达式消除、数组范围消除、方法内联和逃逸分析,完成后再将字节码编译为本地方法。通过本方法,jvm后端编译有针对性的代码逻辑进行优化,在jvm后端编译中对特定标识进行判断,若有标志性字段的方法,则启动实时编译,将代码进行本地化编译,让程序直接运行在本地计算机上,而不是jvm虚拟机上。这样可以提高特定方法的执行效率。同时避免其他不相关逻辑影响执行速度。在通用优化的方面进行进一步优化,有助于提升执行效率。对于同样的代码,采用不同的编译方式,其结果对比如下表:java静态编译java动态编译自定义编译编译时间1000毫秒30毫秒40毫秒启动速度30毫秒10毫秒20毫秒运行时cpu占用率10%20%10%编译后文件大小200m160m170m结合数据可以知道,自定义本地编译优化综合了静态编译和动态编译的优势。尽管这里参照本发明的解释性实施例对本发明进行了描述,上述实施例仅为本发明较佳的实施方式,本发明的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1