为什么JIT编译器(Java)不保存结果?

时间:2019-01-03 07:30:30

标签: java jit

当我从这里研究JIT编译器时: What does a just-in-time (JIT) compiler do?

  

Java JIT for Windows没有生成* .exe或* .dll。它   将处理器指令写入内存(RAM)并从   那里。无需创建带有文件头的单独的PE文件   一切

我的问题是为什么,JIT编译器(Java)不保存结果吗?存储编译后的代码以节省下次启动时间是否有用?

(我的问题与上述问题不同,因为我强调了为什么

1 个答案:

答案 0 :(得分:4)

每次运行JIT的输出可能会有所不同-它可以针对当前的负载模式进行优化。有时候,与需要可重用的预编译代码相比,它可以更积极地进行优化。

如果负载模式发生变化,并且发现优化未达到最佳效果甚至不利,则JIT可以取消优化并可能尝试进行其他优化

(另请参见About the dynamic de-optimization of HotSpot

现在,有时候保留一些编译版本的这些结果并在以后重用它们可能会节省一些性能,但是这还需要大量的簿记工作,才能发现一段代码是否已经存在进行了当前相关的优化。

我认为这不值得付出努力。这是在做文件IO和通常快速编译一小段代码之间的权衡。