JIT晚期(运行期)
1. Java的编译和执行 编译 包括两种情况: 1,源码编译成字节码 2,字节码编译成本地机器码(符合本地系统专属的指令) 解释执行 也包括两种情况: 1,源码解释执行 2,字节码解释执行 解释和编译执行的区别是: 是否产生中间本地机器码。 即时编译生成机器相关的中间码,可重复执行缓存效率高。解释执行直接执行字节码,重复执行需要重复解释。 2. 编译原理 在执行前先对程序源码进行词法解析和语法解析处理,把源码转化为抽象语法树。 其中绿色的模块可以选择性实现。 上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript), 而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程。 对于一门具体语言的实现来说: 词法和语法分析乃至后面的优化器和目标代码生成器都可以选择独立于执行引擎,形成一个完整意义的编译器去实现,这类代表是C/C++语言。 也可以把抽象语法树或指令流之前的步骤实现一个半独立的编译器,这类代表是Java语言。 又或者可以把这些步骤和执行引擎全部集中在一起实现,如大多数的JavaScript执行器。 3. 三个编译器 JVM的编译器可以分为三个编译器: ( 1) 前端编译器 : 把.java转变为.class的过程 。如Sun的 Javac 、Eclipse JDT中的增量式编译器( ECJ )。 ( 2) 后端编译器