我自己的感觉
1 启动jvm加载类加载器,将加载相关文件载入内存
2 执行javac命令
3 导入java.lang包和你自己import的包
4 执行编译期检查,有异常则抛出异常。
5 jvm生成与平台无关的二进制字节码文件 就是.class文件。
1 启动jvm加载类加载器,将加载相关文件载入内存
2 执行javac命令
3 导入java.lang包和你自己import的包
4 执行编译期检查,有异常则抛出异常。
5 jvm生成与平台无关的二进制字节码文件 就是.class文件。
1、解析与填充符号表;
2、注解处理器;
3、语义分析与字节码生成:
3.1、标注检查
3.2、数据及控制流分析
3.3、解语法糖
3.3.1、泛型与类型擦除
3.3.2、自动装箱、拆箱与遍历循环
3.3.3、条件编译
3.4、字节码生成
详细要研究下Javac的源代码了,java从也是Java实现的。
程序编译与代码优化(早期(编译器)优化):
https://github.com/arthinking/arthinking.github.io/blob/master/Java/2014120501_JVM%E7%AC%94%E8%AE%B0%20-%20%E7%A8%8B%E5%BA%8F%E7%BC%96%E8%AF%91%E4%B8%8E%E4%BB%A3%E7%A0%81%E4%BC%98%E5%8C%96%EF%BC%88%E6%97%A9%E6%9C%9F%EF%BC%88%E7%BC%96%E8%AF%91%E5%99%A8%EF%BC%89%E4%BC%98%E5%8C%96%EF%BC%89.md