【问题标题】:With JIT Compiler what comes first? Translate into machine code or Interpret the bytecode?使用 JIT 编译器首先要做什么?翻译成机器码还是解释字节码?
【发布时间】:2012-11-14 19:10:16
【问题描述】:

据我所知,JIT 将字节码编译成可以更快运行的本机机器码。所以根据我的信念,我的问题的答案应该是 1。翻译成机器码 2.解释字节码。解释代码意味着执行代码。但我找到了相反的答案!谁能解释一下...在此先感谢

【问题讨论】:

    标签: java jvm jit


    【解决方案1】:

    一旦您有了字节码序列的机器码(正如您所指出的,它应该比解释更快),继续解释该字节码序列 (*) 是没有意义的。在后台运行或尚未开始编译时进行解释更有用(无论出于何种原因 - 一个常见的情况是:代码执行的频率不够高,不值得编译)。

    (*) 实际上,一些 JIT 编译器确实对机器代码进行了专门化,以至于它对某些代码路径或输入无效,并且在发生这些情况时不得不退回到解释/重新编译。甚至其他 JIT 编译器有时也会重新编译代码,这可能会也可能不会导致暂时返回解释。但总的来说,如果代码适用并且速度更快(应该总是如此),那么不使用它是没有意义的。

    【讨论】:

    • 非常感谢德尔南。 @delnan您的意思是说,一旦转换为机器代码,执行该代码而不是jvm是cpu的责任。那么字节码的解释应该比翻译成机器码更早?可能存在不需要解释字节码的情况,因为所有内容都将通过 jit 转换为机器码?请解释一下....其实我对此感到困惑
    • @Hriday (1) 是的,机器码是在 CPU 上运行的。还有什么地方? (2) 是的,这意味着解释通常发生在编译之前。但正如我在上面所写的,现实更为复杂,两者可能交错。 (3) 是的,一个可能最终会编译出所有代码。但这通常会带来更差的整体性能(某些代码运行得很少,以至于运行机器代码所节省的时间少于编译它所花费的时间),所以它并没有真正完成。
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多