Java编译优化 Brief

2018-01-06  本文已影响84人  wusp

虽然在不同目标平台上的JVM实现不一样,但是有3种Java Compiler是极具代表性的:

前端编译器

从传统的javac来看,编译过程大致分为3个阶段:

  1. 解析与填充符号表过程
  2. 注解处理器的注解处理过程
  3. 分析与字节码生成过程

解析与填充符号表过程

注解处理器处理

我们平时使用的Java注解,本质就是用来对语法树做出修改,处理器的任务便是在编译是识别出这些注解同时修改抽象语法树。

语义分析与字节码生成

JIT

在了解早期编译优化时已经学习了传统的前端编译器。那么对商用JVM来说,还有一种极其重要的编译器,这便是JIT Compiler(Just In Time Compiler)。我们知道,Java程序都是通过解释器(interpreter)进行解释执行的,而一些频繁运行的程序代码便会被认为热点代码(Hot Spot Code)。JIT的任务便是将这些热点代码编译成目标平台的机器码,并进行各种层次的优化。
JIT虽然能够加快JVM的执行效率,但是却同内存资源有着更高的要求,解释器可以节约内存,在一些资源受限的机器运行JVM时解释器更受青睐。不过现在已经很少见到没有JIT的虚拟机了,更多的是两种配合使用,甚至是三种Compiler一起使用。如Android在5.0 以前使用的Dalvik 虚拟机就使用的是Interpreter + JIT,5.0 ~ 7.0 之间使用的ART 是Interpreter + AOT的组合,而在最新的7.0之后的ART上使用的是Interpreter + JIT + AOT的组合。

上一篇 下一篇

猜你喜欢

热点阅读