前端编译器 Javac

javac 命令的过程,其实就是 javac 编译器解析 Java 源代码,并生成字节码文件的过程

Javac编译器的处理过程:

  1. 词法,语法解析
  2. 填充符号表
  3. 注解处理
  4. 分析与字节码生成

JIT编译器:从字节码到机器码

运行字节码,执行程序有两种方式

  • Java解释器执行
    • 启动速度快,运行速度慢
  • JIT编译器转为机器码执行
    • 启动速度慢,运行速度快。一次编译,之后都可运行,效率大大提高

      *注:实际情况中,为了运行和效率,两者结合的方式进行编译执行

image.png

HotSpot内置的即时编译器(C1 和 C2)

两个编译模式(complier mode)

  • Client Complier(简称:C1)
  • Server Complier(简称:C2)
  • 两者区别
    • 相同点
      • 都是将字节码编译为本地代码
    • 不同点
      • C1:简单,可靠的优化,相对保守,其编译速度比C2快
      • C2:耗时较长的优化,甚至会根据性能监控信息进行一些不可靠的激进优化,其编译质量相对较好
  • 默认模式
    • 混合模式 C1 + C2

02. JVM三种编译器 - 图2