编译器 VS 解释器(Java是编译型与解释型并存?)

一、详细对比

解释器和编译器均是将高级编程语言(源代码)转换为机器语言

				+---------------+			+---------------+
				|	高级语言		|			|	高级语言		|
				|				|			|				|
				+---------------+			+---------------+
				|	 编译器		|			|	 解释器		|
				|				|			|				|
				+---------------+			+---------------+
				|	机器语言		|			|	机器语言		|
				|				|			|				|
				+---------------+			+---------------+
				|	  硬件		|			|	 硬件		|
				|				|			|				|
				+---------------+			+---------------+
参数编译器解释器
源码扫描一次性编译全部源码一次解释一行源码
错误检查编译的同时,检查并展示所有错误解释一行,展示一行的错误
执行产物编译后产出机器码文件不产生任何实体文件
执行时间很快较慢
程序运行不需要源码,运行编译后的机器码需要源码,读取一行,运行一行
语法语义编译时都要检查只检查语法错误
大小较大更小
灵活性不够灵活相对灵活
效率高效相对较低
代表语言C,C++,javaPython, Ruby, Perl

二、JVM 是解释器

2.1 JVM
  • 依赖硬件的虚拟平台
  • 组成
    1.类加载器加载.class文件
    2. 字节码验证组件,检查字节码中是否有违反访问限制区域的内容。这也是JAVA是安全的原因之一。
    3. 执行引擎,将字节码翻译成机器码
2.2 术语解释:
  • Javac 是Java 编译器,将源码编译成字节码
  • JVM 将字节码翻译成机器码,所以JVM是解释器。
  • JIT(Just In Time Compiler) 在JVM运行时,当一段字节码需要执行时,JIT将其编译成机器码。 目的在于最大可能优化性能。
  • 字节码,字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字节为单位进行读取。

参考:https://builtin.com/software-engineering-perspectives/compiler-vs-interpreter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值