【问题标题】:Difference between a JVM with and without JIT有和没有 JIT 的 JVM 之间的区别
【发布时间】:2013-02-01 05:04:05
【问题描述】:

我指的是Oracle的以下文档:

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/underst_jit.html#wp1080014

在“1. JRockit JVM 运行 JIT 编译”一节中提到,JIT JVM 的启动时间更长,执行时间更短,而没有 JIT 的 JVM 反之亦然。

我很困惑,因为据我所知,JIT 根据程序的执行编译代码,因此编译速度很快。并且代码将被优化,因此执行时间也会很快。

他们想用这一点表达什么?我没有正确理解它。

【问题讨论】:

    标签: java jvm jit


    【解决方案1】:

    基本上他们所说的 JIT 编译需要时间。 HotSpot 实际上会编译两次代码 - 首先未优化,然后对常用部分进行优化。

    所以当你的程序启动时,根据虚拟机类型,它首先以解释模式运行字节码,或者等待它编译并切换到编译版本,然后如果代码被频繁使用,则重新编译它并进行更多优化。这一切都需要资源和时间,因此启动速度较慢,但​​是当程序预热时,它运行得很快。

    在解释模式下,没有 JIT,VM 只是立即开始解释代码,因此启动速度更快,但性能更差。

    【讨论】:

    • "HotSpot 实际上会编译代码两次" => 或更多 - 随着 JVM 收集有关其运行方式的更多信息,方法可以编译多次。在某些情况下它也可以被反编译。
    • 所以编译后的版本是机器可执行的?如果是这样,是否可以将其输出为没有 jvm 的可执行文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多