【问题标题】:Why is java both compiled and interpreted [duplicate]为什么java既编译又解释[重复]
【发布时间】:2012-08-30 12:29:10
【问题描述】:

可能重复:
Is Java a Compiled or an interpreted programming language?

为什么 Java 既是编译语言又是解释语言?

我们首先使用javac(编译)编译java程序,然后使用java(解释)运行程序。这样做有什么好处?

另外,JIT 角色在哪里出现?

【问题讨论】:

  • 我认为这个答案应该可以帮助stackoverflow.com/a/1326084/846476
  • @RNJ 你是对的 - 这是一个精确的重复 - 投票结束
  • @MichaelPetrotta 这无关紧要,但简而言之,我希望 OP 用他找到的解决方案更新问题并接受他自己的答案(以防所有其他答案都没有用) - 为了“回馈”社区。​​span>
  • 我浏览了我的问题被称为重复的链接。其中有一个声明“当前版本的 Sun HotSpot JVM 使用一种称为即时 (JIT) 编译的技术将字节码编译为 CPU 在运行时即时理解的本机指令。”我的印象是 JVM 是一个解释器,但它表明它会进一步编译字节码。我很迷惑。还写到它在运行时动态执行。有人也可以解释一下吗?
  • 有人可以回答我的评论吗?

标签: java compiler-construction interpreter


【解决方案1】:

编译一次,随处运行是原因之一。

JVM 是特定于操作系统的。因此,JVM 解释编译后的 .class(字节码)文件并转换为机器特定的指令集。

【讨论】:

    【解决方案2】:

    Java 编译器通常将源代码编译成一种中间语言,通常表示为“字节码”。它本身不是本地硬件的机器代码,但在某种意义上它是 Java 虚拟机的“机器”代码。

    这种分离的好处是(理论上)您可以在许多不同平台上实现 VM,但所有平台都将能够运行相同编译的 Java 字节码。

    即时编译器是假想的 VM 的一部分,实际上在需要时将字节码位动态转换为真实的本机机器码。这是由于观察到纯粹在 VM 中运行 Java 程序比等效的本机代码慢得多。与本机编译的代码相比,JIT 编译使 Java VM 在性能方面具有竞争力。

    【讨论】:

      【解决方案3】:
      1. Java 被“编译”成字节码
      2. 字节码在程序执行时被“解释”
      3. JIT 编译器并将字节码“预编译”为本机机器码,优化执行时间

      这里有一篇文章提供了有关 Java JIT 的更多详细信息:

      【讨论】:

      • 从 JDK 1.5 开始的 Afaik,Java 字节码不再可解释。需要 JIT
      猜你喜欢
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2019-10-28
      • 2010-11-14
      • 2016-02-16
      相关资源
      最近更新 更多