【问题标题】:Why doesnt JIT compiler ( Java ) save the results?为什么 JIT 编译器(Java)不保存结果?
【发布时间】:2023-09-12 05:10:02
【问题描述】:

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

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

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

(我的问题与上面提到的不同,因为我强调了WHY

【问题讨论】:

  • 我不认为这是一个天生不好的问题,但只有实际 JVM 的开发人员才能确定地回答。很可能是因为保存内部 JVM 状态将是一个非常棘手的操作。也就是说,检查 GraalVM。

标签: java jit


【解决方案1】:

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

如果负载模式发生变化并且发现优化不是最佳甚至是不利的,JIT 可以取消优化并可能尝试不同的优化

(另见About the dynamic de-optimization of HotSpot

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

我想这不值得付出努力。它在执行文件 IO 和通常快速编译小段代码之间进行权衡。

【讨论】: