为什么 JIT 编译器 ( Java ) 不保存结果?
Why doesnt JIT compiler ( Java ) save the results?
当我从这里学习 JIT 编译器时:
What does a just-in-time (JIT) compiler do?
和
there's no *.exe or *.dll generated by the Java JIT for Windows. It
writes the processor instructions to memory (RAM) and runs it from
there. There's no need to create a separate PE file with file-headers
and everything
我的问题是 为什么 JIT 编译器 (Java) 不保存结果?把编译好的代码存起来,为下次上线节省时间不是很有用吗?
(我的问题和上面的不一样,因为我强调了WHY)
每个 JIT 的输出可能不同 运行 - 它可以针对当前负载模式进行优化。与需要可重用的预编译代码相比,这有时允许它进行更积极的优化。
如果加载模式发生变化并且发现优化不是最优的甚至是不利的,JIT 可以取消优化并可能尝试不同的优化
(另见 About the dynamic de-optimization of HotSpot)
现在,保留各种编译版本的这些结果并在以后重用它们有时可能会节省一些性能,但也需要大量的簿记才能找出一段代码是否已经编译了当前相关的优化。
我想这不值得付出努力。它是执行文件 IO 和通常快速编译一小段代码之间的权衡。
当我从这里学习 JIT 编译器时: What does a just-in-time (JIT) compiler do? 和
there's no *.exe or *.dll generated by the Java JIT for Windows. It writes the processor instructions to memory (RAM) and runs it from there. There's no need to create a separate PE file with file-headers and everything
我的问题是 为什么 JIT 编译器 (Java) 不保存结果?把编译好的代码存起来,为下次上线节省时间不是很有用吗?
(我的问题和上面的不一样,因为我强调了WHY)
每个 JIT 的输出可能不同 运行 - 它可以针对当前负载模式进行优化。与需要可重用的预编译代码相比,这有时允许它进行更积极的优化。
如果加载模式发生变化并且发现优化不是最优的甚至是不利的,JIT 可以取消优化并可能尝试不同的优化
(另见 About the dynamic de-optimization of HotSpot)
现在,保留各种编译版本的这些结果并在以后重用它们有时可能会节省一些性能,但也需要大量的簿记才能找出一段代码是否已经编译了当前相关的优化。
我想这不值得付出努力。它是执行文件 IO 和通常快速编译一小段代码之间的权衡。