早期(编译期)优化

本文介绍了Java的早期优化,主要关注编译期优化,包括Javac编译器的工作原理,如解析、填充符号表、注解处理器以及语义分析与字节码生成。讲解了Javac的源码结构和调试方法,阐述了Java语法糖如泛型、自动装箱拆箱、遍历循环等在编译期的处理。此外,还探讨了条件编译在Java中的实现方式和注解处理器在编码风格校验中的应用。
摘要由CSDN通过智能技术生成

早期(编译期)优化

10.1概述

Java语言的“编译期”是一段“不确定”的操作过程,因为它可能是

1)指一个前端编译器(其实叫“编译器的前端”更准确一些)把*.java文件转变成*.class文件的过程;如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)

2)也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程;如HotSpot VM的C1、C2编译器

3)还可能是指使用静态提前编译器(AOT编译器,Ahead OfTime Compiler)直接把*.java文件编译成本地机器代码的过程,如GNU Compiler for the Java(GCJ)[插图]、Excelsior JET。

Javac做了许多针对编码过程的优化措施来改善程序员的编码风格和提高编码效率。相当多新生的Java语法特性,都是靠编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来支持,可以说,Java中即时编译器在运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化过程对于程序编码来说关系更加密切

虚拟机设计团队把对性能的优化集中到了后端的即时编译器中,对不是Javac产生的class文件带来好处。

10.2 Javac编译器

HotSpot虚拟机那样使用C++实现;javac使用java实现

10.2.1 Javac的源码与调试

JDK_SRC_HOME/langtools/src/share/classes/com/sun/tools/javac,除了JDK自身的API外,就只引用了JDK_SRC_HOME/langtools/src/share/classes/com/sun/*里面的代码;

创建类,导入源文件(若出现Access Restriction,在java build path -libraries-access rules edit-add Accessible),运行com.sun.tools.javac.Main的main()。

编译过程大致可以分为三个过程,分别是:

□ 解析与填充符号表过程。

□ 插入式注解处理器的注解处理过程。

□ 分析与字节码生成过程。

入口是com.sun.tools.javac.main.JavaCompiler类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0oXQRBf7-1578645081964)(C:\Users\zhangli\Desktop\张丽\tu\javac编译过程主体代码.png)]

10.2.2 解析与填充符号表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值