【问题标题】:How a JIT compiler helps performance of applications?JIT 编译器如何帮助提高应用程序的性能?
【发布时间】:2011-02-19 04:39:45
【问题描述】:

我刚刚读到Android 的性能提升了 450%,因为它添加了 JIT 编译器,我知道 JIT 是什么,但我真的不明白为什么它比正常编译的代码更快?或者与 Android 平台的旧方法(类似 Java 的运行编译的字节码)有什么区别。

谢谢!

编辑:这非常有趣,谢谢!,我希望我能将每个答案都选为正确的:)

【问题讨论】:

  • 您从哪里得知由于 JIT 而性能提高了 450%?
  • JIT 编译器并不比已编译的代码快。它只比解释代码快。由于 JIT 编译器不能像静态编译器那样花费大量时间进行优化,因此代码不如普通编译代码快。此外,每次运行代码都需要编译时间。

标签: android jit compiler-construction


【解决方案1】:

首先声明一下,我对 Android 一点也不熟悉。总之……

我熟悉的JIT编译有两种应用。一种是将字节码转换为实际的机器指令。第二个是Superoptimisation

JIT 字节码编译加快了速度,因为字节码只被插入一次,而不是每次执行。这可能就是您所看到的那种优化。

JIT 超级优化是搜索真正优化的指令集来实现程序逻辑,它有点深奥。这可能不是你在说的,虽然我已经阅读了 100% - 200% 速度提升的报告。

【讨论】:

    【解决方案2】:

    VM 需要将编译后的字节码转换为机器指令才能运行。以前这是使用解释器完成的,该解释器适用于只调用一次的代码,但对于重复调用的函数不是最佳的。

    当作为 JIT 版本的 VM 替换初始解释器版本时,Java VM 看到了类似的加速。

    【讨论】:

    • 为了澄清,Dalvik,Android 上的“类 Java”VM 是一个字节码解释器。在 Android 2.2 中,Google 创建了一个字节码到机器码的编译器。对于执行本机编译的开销小于执行成本的代码,使用 JIT 的 Dalvik 应该会带来显着的性能提升。
    【解决方案3】:

    JIT 编译器知道它的系统,它可以使用这些已知信息来生成比字节码更高效的代码,并且有传言说它可以超越预编译程序。

    这就是为什么它比传统的 java 系统运行得更快,其中代码仅作为字节码运行,Android 也使用它。

    【讨论】:

      【解决方案4】:

      除了将 java 代码编译为本机代码(这也可以通过编译器完成)之外,JIT 还可以进行优化,而您只能在运行时进行。

      JIT 可以随着时间的推移监控应用程序行为并优化那些真正产生影响的使用模式,即使以牺牲代码执行路径中的其他分支为代价(如果这些分支不经常使用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多