java 编译器工作原理

目录

 

1、java编译过程主要分为四步:

2、词法分析:

3、语法分析:

4、语义分析:

5、字节码生成:


1、java编译过程主要分为四步:

  1. 词法分析
  2. 语法分析
  3. 语义分析
  4. 字节码生成

2、词法分析:

词法分析是将java源代码一个字节一个字节的读出来,根据关键字,分辨出符合规范的Token流。也就是把一段代码分解成一个个单独的词。

根据这次Token流,编译器完成了理解java语言的第一步。例如:第一个关键字就是public,对应的Token类为:Thken.PUBLIC。同理class关键字对应Token.CLASS。把一句话:我要睡觉,分解为:我  要  睡觉。

3、语法分析:

语法分析器会读取Token流,组建成更加结构化的语法书。也就是将这些Token流中的单词组装成一句话,然后生成一颗语法树。

4、语义分析:

这个阶段就是编译器对代码的各种检查和优化,而实际操作的对象就是生成java简单语法树的节点。

编译器首先对代码进行一些检查,保证代码符合java语言规范,例如:

  • com.sun.tools.javac.comp.Check类会检查简单语法树中,变量类型是否正确,方法返回类型是否与接收的引用值匹配等等
  • com.sun.tools.javac.Resolve类会检查变量、方法或类的访问是否合法,变量是否是静态变量,变量是否初始化。

同时还有对代码进行一些简单的优化。

5、字节码生成:

生成语法树之后,接下来javac会调用com.sun.tools.javac.jvm.Gen类遍历语法树,生成java字节码:

  1. 将java 案犯法中代码块转化为符合JVM语法的命令形式。JVM的操作都是基于栈的,所有操作都必须经过出栈和入栈类完成。
  2. 按照JVM的文件组织格式将字节码输出到以class为拓展名的文件中。

获得JVM字节码后,字节码就可以交个JVM执行了。 

你可能感兴趣的:(java编程,java,jvm,java编译过程)