java编译器优化

java编译器优化
1.把java文件转变成呢过class文件的过程
2.javac编译器的过程:
1.解析与填充符号表过程
2.插入式注解处理器的注解处理过程
3.分析与字节码生成过程

解析与填充符号表:
1.词法,语法分析:词法分析是将源代码的字符流转变为标记(Token)集合,标记是编译过程的最小元素:int, a, =, b, +, 1
语法分析:根据Token序列来构造抽象语法树:一种描述程序代码语法结构的树形表示
2.填充符号表:符号表是由一组符号地址和符号信息构成的表格
符号表登记的内容将用语义检查(检查一个名字的使用和原先的说明是否一致)和产生中间代码


注解处理器:可以读取,修改,添加抽象语法树中的元素:若对语法树进行了修改,编译器就货到解析及填充符号表的过程。


语义分析和字节码生成:
1.语义分析:对结构上正确的源程序进行上下文有关性质的审查,如类型审查
1.标注检查:检查变量使用前是否已声明,变量与赋值数值之间类型是否匹配
常量折叠
2.数据及控制流分析:对程序上下文逻辑的验证:、
方法的每条路劲是否否有返回值
是否所有受检查异常都被正确处理了


局部变量和实例变量,类变量是有区别的:在常量池中没有CONSTANT_Fieldref_info的符号引用
没有访问标志

3.解语法糖:泛型,变长参数,自动拆装箱等,编译期间还原为简单的基础语法结构

2.字节码生成:把语法树,符号表转化成字节码写入磁盘
少量代码的添加转换工作(<init>方法:不是默认构造函数(符号填充表过程完成的) 
和<clinit>方法)

3.语法糖:
1.泛型:本质是参数化类型
编译后转化为强制转换

两个方法加入不同的返回值能共存在一个Class文件中
特征签名:Java代码中:包括方法名,参数顺序,及参数类型
字节码中:还包括方法返回值和受查异常表

2.自动拆装箱,循环遍历
Integer.valueOf()和Integer.intValue()
循环遍历还原成迭代器实现

3.条件编译:
自动擦出分支中不成立的代码块

猜你喜欢

转载自blog.csdn.net/zhuyong7/article/details/80474501