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是编译型语言。

### 回答1: Java是一种编译型语言Java代码在编译之前需要先经过编译器的处理,将源代码编译成字节码文件,然后这些字节码文件可以在Java虚拟机(JVM)上解释执行。这种方式可以提高Java程序的性能,并且可以使得Java程序跨平台运行,因为不同的平台只需要安装相应的Java虚拟机即可。 ### 回答2: Java是一种混合型语言,既可以编译也可以解释Java程序首先通过编译器将源代码转换成字节码(bytecode),然后这些字节码可以在Java虚拟机(JVM)上解释执行。编译过程将源代码转换成字节码,可以提前发现一些语法错误,这可以减少程序运行时的错误。一旦程序编译完成,字节码可以在不同的操作系统上运行,只要安装有适当版本的Java虚拟机。解释执行过程通过JVM将字节码逐行解释成机器语言执行。这种解释执行方式使得Java具有跨平台的特性,同一份字节码可以在不同的操作系统和硬件上运行,因此被广泛用于开发跨平台应用程序。然而,为了提高Java程序的性能,还可以通过即时编译(Just-In-Time Compilation)将字节码转换成本地机器码执行,这种方式将一些频繁执行的代码编译成本地机器码,以提高程序的执行速度。因此,Java既具备了编译型语言的静态检查和跨平台特性,又具备了解释型语言的灵活性和动态性能优化。 ### 回答3: Java是一种编译型语言编译型语言是指在运行程序之前需要将程序源代码通过编译器转换为机器可执行的二进制代码。在Java中,源代码是通过Java编译器(javac)将源代码(.java文件)编译成Java字节码文件(.class文件)。然后,Java虚拟机(JVM)通过解释器(解释和执行字节码)将字节码转换为特定机器的指令执行程序。 与解释型语言不同,Java在编译时会将代码转换为机器可以理解的形式,这使得Java在执行时更加快速和高效。此外,Java字节码在不同的平台上是可移植的,这意味着可以在不同的操作系统和硬件上执行同一份Java程序。 总之,Java是一种编译型语言,通过编译器将源代码转换为字节码文件,并由Java虚拟机解释执行。这种设计使得Java程序在不同平台上具有高度可移植性和高效性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值