Java中.class文件的用途

时间:2014-03-29 15:40:09

标签: java compiler-construction jvm interpreter

我试图了解.class文件如何在java中工作以及它们的用途是什么。我在网上找到了一些信息,但我得到了不满意的解释。

一旦我们运行编译器,我们就会得到.class文件,它是字节码。这台机器是否可读?如果没有,这就是为什么我们需要程序的解释器才能成功运行?

此外,由于.class文件相当于我们的.java程序,为什么不能通过使用VM运行.class文件来立即运行java程序,他们需要拥有.java文件也是?

5 个答案:

答案 0 :(得分:6)

根据定义,JVM是virtual machine,它是一个模拟真实机器功能的软件机器。与真实机器一样,它具有instruction setbytecodes),虚拟计算机体系结构和执行模型。它能够运行用这个虚拟指令集编写的代码,就像真机可以运行机器代码一样。

因此,类文件包含虚拟指令集中的指令,并且能够运行它们。就此而言,虚拟机可以解释代码本身,也可以针对当前运行的硬件架构进行编译。有些人做两件事,有些只做其中一件。

例如,Java HotSpot最初解释字节码,并逐步将代码编译为机器代码。这称为adaptive optimization。有些虚拟机总是直接编译为机器代码。

所以,你可以看到有两种不同的“编译概念”。一个是将Java代码转换为JVM字节码(从.java到.class)。并且在程序运行时发生第二个编译阶段,其中字节码可以被解释或编译为实际的机器代码。这是由JVM中的just-in-time compiler完成的。

因此,正如您所看到的,计算机无法直接运行Java程序,因为该程序不是用计算机理解的语言编写的。它用语言编写,所有JVM实现都可以理解。并且有许多操作系统和硬件架构的JVM实现。这些JVM以任何特定硬件(机器代码)翻译此通用语言(字节码)中的程序。这就是虚拟机的美妙之处。

答案 1 :(得分:4)

  1. .class文件是机器可读的。读取它的机器是Java虚拟机,它解释它并将其编译为本机代码(可由您的计算机执行)。

  2. 您不需要.java个文件来运行Java代码。您只需要.class个文件。

答案 2 :(得分:0)

它是机器可读的,但不能在裸硬件上执行。它通过Java虚拟机运行,这是一个具有非常高性能的即时编译器的解释器。有充分的理由让解释器只使用类文件的字节码。简而言之,他们是:

  1. 更容易构建interpeter,因为字节码更接近JIT可以转换为本机机器代码的指令。
  2. 更容易解决依赖关系,因为Java编译器通过import命令对它们执行了一些语法糖。

答案 3 :(得分:0)

Java字节码(.class文件)不能直接执行。 它是由底层Java虚拟机解释的中间语言。当然可以进行一些优化(即即时编译)。


要运行Java程序,您只需要字节码文件,.java文件包含源代码。

答案 4 :(得分:0)

Compiler Vs Interpreter:

  1. 编译器将整个程序作为 输入
    口译员采用单一指令 输入

  2. 中间对象代码是 产生
    没有中间对象代码 产生

  3. 条件控制声明是 执行得更快 条件控制声明是 执行速度较慢

  4. 内存要求:更多 (由于生成了对象代码)
    内存要求:减去

  5. 不需要每次都编译程序 时间
    每次更高级别的计划 转换为较低级别的程序

  6. 整个后显示错误 程序被检查
    每个都显示错误 指令解释(如果有的话)

  7. 示例:C编译器
    示例:BASIC