前端编译器 Javac
javac 命令的过程,其实就是 javac 编译器解析 Java 源代码,并生成字节码文件的过程
Javac编译器的处理过程:
- 词法,语法解析
- 填充符号表
- 注解处理
- 分析与字节码生成
JIT编译器:从字节码到机器码
运行字节码,执行程序有两种方式
- Java解释器执行
- 启动速度快,运行速度慢
- JIT编译器转为机器码执行
- 启动速度慢,运行速度快。一次编译,之后都可运行,效率大大提高
*注:实际情况中,为了运行和效率,两者结合的方式进行编译执行
- 启动速度慢,运行速度快。一次编译,之后都可运行,效率大大提高
HotSpot内置的即时编译器(C1 和 C2)
两个编译模式(complier mode)
- Client Complier(简称:C1)
- Server Complier(简称:C2)
- 两者区别
- 相同点
- 都是将字节码编译为本地代码
- 不同点
- C1:简单,可靠的优化,相对保守,其编译速度比C2快
- C2:耗时较长的优化,甚至会根据性能监控信息进行一些不可靠的激进优化,其编译质量相对较好
- 相同点
- 默认模式
- 混合模式 C1 + C2