第10章 早期(编译期)优化

10.1 概述
1、前端编译器:JavaC
编译器的前端,把Java文件转变成class文件的过程

2、后端运行期编译器(JIT编译器) : HotSpot VM的C1、C2编译器
把字节码转变成机器码的过程

3、静态提前编译器(AOT编译器):GCJ
直接把Java文件编译成本地机器代码的过程

Java中即时编译器在运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化过程对于程序编码来说关系更加密切。

10.2 Javac编译器

10.2.1 Javac的源码与调试
这里写图片描述

这里写图片描述

10.2.2 解析与填充符号表

  1. 词法、语法分析

10.2.3 注解处理器

10.2.4 语义分析与字节码生成

  1. 标注检查
  2. 数据及控制流分析
  3. 解语法糖
  4. 字节码生成

10.3 Java语法糖的味道

10.3.1 泛型与类型擦除
Java的泛型,只在程序源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型了,并且在相应的地方插入了强制转型代码。泛型技术实际上是Java语言的语法糖,Java语言中的泛型实现方法称为类型擦除,基于这种方法实现的泛型称为伪泛型。

10.3.2 自动装箱、拆箱与遍历循环

10.3.3 条件编译

除了泛型、自动装箱、自动拆箱、遍历循环、变长参数和条件编译之外,还有语法糖:内部类、枚举类、断言语句、对枚举和字符串的switch支持,try语句中定义和关闭资源等。

10.4 实战:插入式注解处理器

10.4.1 实战目标
使用注解处理器API来编写一款拥有自己编码风格的校验工具。

10.5 本章小结
了解了Java源代码编译成字节码的过程,分析了Java语言中泛型、主动装箱/拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解器来完成一个检查程序命名规范的编译器插件。

猜你喜欢

转载自blog.csdn.net/u010819416/article/details/80615409