编译型语言和解释型语言

1、编译型语言

  1. 编译型语言是指程序在执行之前需要一个专门的编译过程,
  2. 把源代码编译为机器语言,这样运行时就不需要重新编译,
  3. 执行效率高,但缺点是,编译型语言依赖编译器,跨平台性差。

比如C语言程序的执行过程,要先将后缀为.c的源文件通过编译、链接为后缀为.exe的可执行文件,才能运行。

2、解释型语言

  1. 解释型语言是指源代码不需要预先进行编译,
  2. 在运行时,要先进行解释再运行,
  3. 解释型语言执行效率低,但跨平台性好。

比如JavaScript,Python

3、Java 是解释执行对吗?

Java分为编译期和运行期

  1. 编译期:将源代码编译为以“.class”结尾的字节码文件
  2. 运行期:将字节码文件加载进虚拟机进行解释或者编译执行

从硬件视角看,Java字节码无法直接执行,因此Java虚拟机需要把字节码翻译成机器码才能运行。在HotSpot中,上述翻译有二种方式:

  1. 解释执行:逐条将字节码编译为机器码在执行(同声传译)

  2. 即时编译:以方法为单位将字节码先编译为机器码在执行(放录音)

前者优势无需等待编译,而后者运行速度快。

总结!

Java是编译-解释型语言!

  1. 源代码首先通过Javac编译成字节码,然后在运行时,通过虚拟机内嵌的解释器将字节码转化机器码。
  2. 在运行期HotSpot采用混合模式,先解释执行字节码,然后反复执行的热点代码,在以方法为单位即时编译
  3. JVM中提供了JIT(Just In Time) 编译器也就是动态编译器。JIT能够在运行时将热点代码编译为机器码,这段热点代码就是编译执行,而不是解释执行。

HotSpot内置了多个即时编译器:C1(Client编译器),C2(Server编译器)。Java 7始,HotSpot默认采用分层编译的方式:热点方法首先被C1编译,而后热点方法中的热点会进一步被C2编译。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值