【问题标题】:Does JIT and JAVA interpreter perform their task together hand by hand or JIT completes it works first?JIT 和 JAVA 解释器是手动一起执行任务还是 JIT 先完成任务?
【发布时间】:2016-06-16 20:50:39
【问题描述】:

根据我的理解,如果 Java 解释器单独开始逐行执行字节码,性能会很慢,因此 JIT 用于代码优化以更快地执行代码。

JIT编译器优化代码,java解释器逐行翻译优化后的代码。由于JIT只在运行时运行,所以我们没有得到任何二进制输出。一旦解释器翻译,就会产生二进制代码。

---现在我的问题是,JIT 和 JAVA 解释器可以一起工作吗? 或者, jit编译器先工作,然后java解释器开始工作?

请确认一下?

【问题讨论】:

  • Java 字节码中没有行,因此解释器不会“逐行”执行,而是逐条执行。此外,您对“口译员翻译”的想法很奇怪,因为在您问题的开头,您是对的,口译员不翻译,而是执行。目前还不清楚,为什么你会在你的问题中间突然改变解释器的概念来做 JIT 编译器的工作。
  • 我是初学者。非常感谢您的回答。这是非常有帮助的解释。我不知道我正在通过谷歌搜索学习,在许多地方我发现了“口译员翻译”这个词......感谢您纠正它执行但不翻译。
  • 基本上,两者都执行不同的任务,处理相同的源数据。解释器直接执行字节码,而 JIT 编译器将其翻译成本机代码供以后执行(术语 JIT 编译器最初仅指此翻译任务,但如今,优化和翻译通常被认为是不可分割的任务)。因此,当他们在做不同的事情时,会有某种互动,例如必须有一个协议来定义解释器如何停止工作以切换到 JIT 编译器生成的本机代码,以及本机代码如何切换回来……

标签: java jvm interpreter jit


【解决方案1】:

当 Java 运行时启动时,它将使用解释器运行字节码。由于方法被重复调用,它们将被编译为更快的版本。如果调用次数更多,编译速度会更快。

【讨论】:

    【解决方案2】:

    当 java 运行你的程序时,它会解释字节码并运行它。如果它检测到某个特定的代码位运行非常频繁,JIT 编译器将启动,并且字节码将被编译为该代码运行的任何平台的特定于平台的代码(即机器代码)。

    对于已经被 JIT 编译器编译的代码,直接使用编译后的代码而不是字节码,因此不需要解释(这就是它更快的原因)。

    在执行 JIT 编译时会有一次性的性能损失,所以这就是为什么 java 只对频繁运行的代码这样做。

    【讨论】:

      猜你喜欢
      • 2016-11-19
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      相关资源
      最近更新 更多