java解释器虚拟机-【Java解释器和编译器】解释器和编译器的深入理解

2022-12-26 15:53:45 浏览数 (1)

  作为一个看过JVM虚拟机的小白,不懂解释器和编译器之间的区别的,那就是糗大了~

  1 参考文献 深入理解JVM虚拟机 2 简单地区别解释器和编译器

  JVM:Java字节码(Java )在上面可以直接运行,是JVM平台无关的基础。JVM把每一条要执行的字节码交给解释器,翻译成对应的机器码,然后由解释器执行。JVM解释执行字节码文件就是JVM操作Java解释器进行解释执行字节码文件的过程。

  Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件java解释器虚拟机,二进制字节码文件),这种字节码就是JVM的“机器语言”。javac.exe可以简单看成是Java编译器。

  Java解释器:是JVM的一部分。Java解释器用来解释执行Java编译器编译后的程序。java.exe可以简单看成是Java解释器。

  3 深入了解下Java中的编译器

  JVM中,把Java编译过程分为两个过程,分别是前端编译(.java文件转换成.class文件)和后端编译(JIT编译器对应.class文件转换成机器码文件)

  先说前端编译过程,也就是Java中javac.exe文件所做的事情java解释器虚拟机,主要是三件事

  1. 解析与填充符号表

  1.1 词法分析(代码字符流转变为标记集合Token)

  1.2 语法分析(根据Token序列生成语法树)

  1.3 填充符号表

  2. 插入式注解处理器的注解过程

  2.1 注解处理API对语法树进行修改

  3. 分析和字节码的生成

  3.1 标注检查–变量使用前是否声明,=号左右是否匹配等,常量折叠(int a = 1 3,字节码中a=3)

  3.2 数据及控制流分析–上下文逻辑验证,如,局部变量是否有赋值,方法每条路径是否都有返回值…

  3.3 解语法糖–Java中常见语法糖,自动装箱拆箱,泛型,变长数组等。

  3.4 生成字节码

  再说说,后端编译器–JIT编译器,负责将经常使用的方法或者代码块编译成机器码,提高效率。

  下图是Java中解释器和编译器的交互(JVM中JIT不是必需的,可以么有),关于具体的优化技术,自己也不是看得很清楚。有机会再写吧。

本文共 582 个字数,平均阅读时长 ≈ 2分钟

0 人点赞