【Java解释器和编译器】解释器和编译器的深入理解

8 篇文章 0 订阅

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

1 参考文献

  1. 深入理解JVM虚拟机
  2. https://www.cnblogs.com/chengdabelief/p/6576320.html
  3. https://blog.csdn.net/wangaiheng/article/details/78343260

2 简单地区别解释器和编译器

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

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

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

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

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

先说前端编译过程,也就是Java中javac.exe文件所做的事情,主要是三件事

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不是必需的,可以么有),关于具体的优化技术,自己也不是看得很清楚。有机会再写吧。
在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值