java是编译型语言还是解释型语言?

Java源代码被编译成字节码,这属于编译过程,而字节码在JVM上通过解释器和JIT编译器运行,结合了编译型和解释型语言的特点。HotSpot虚拟机通常同时使用解释器和JIT,而JRockit只有编译器,无解释器。

基本概念

  1. 什么是编译型语言?编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制),比如C和C++.
    编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。
  2. 什么是解释型语言?解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。

要知道java到底是编译型语言还是解释型语言,就要理清楚java源代码文件(.java)到机器码的整个过程。

源代码文件的旅行

  1. 程序员编写的java代码就是源代码,格式为.java。
  2. 经过了javac(正常是IDE自动编译的)编译后,就是class文件,也叫字节码(bytecode)文件,格式是.class,当打开class文件会发现内容如下:
    首先是二进制文件,其次是以16进制表示的
    字节码文件本质是二进制文件,只是以16进制表示。
  3. jvm上场,jvm有JIT(即时编译器),AOT(提前编译器),还有解释器。
  • AOT可以把字节码文件在运行之前提前编译为二进制的本地机器码(计算机的机器码)
  • JIT可以在运行期间把热点代码编译为本地机器码。
  • 解释器可以一边解析字节码文件一边编译为本地机器码执行。

正常情况下,是解释器和JIT配合,当然也可以AOT,或者只有AOT也可以,常用的HotSpot是解释器和JIT配合,可以配置AOT。

总结

从概念和java文件的旅行中我们可以得出以下结果:

  1. Java文件编译成字节码文件(二进制)就是编译过程,是编译型语言。(jvm也是一种机器,字节码就是jvm的机器码)
  2. 字节码文件一边解析一边执行的过程就是解释过程,是一种解释型语言。
  3. 字节码文件通过AOT提前编译成本地机器码的过程,是一种编译型语言。
  4. JIT是在运行期起作用的,不是执行之前,可以看做解释过程的优化。

由于通常用的是HotSpot虚拟机,并且基本是解释器都有使用,所以我们通常说java即是编译型又是解释型语言。例外:三大虚拟机之一的JRockit,没有解释器,所以对它来说,java是编译型语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值