当程序终止或重新启动时,JIT编译器生成的机器代码/指令会发生什么。 JIT编译是否再次发生?如果是这样,为什么会使用这种方法?
为了保持范围简单,我想特别了解.NET,但为了其他人的利益,欢迎其他实现的答案
答案 0 :(得分:2)
JIT编译是否再次发生?
是的,总的来说。
如果是这样,为什么会使用这种方法?
首先,它避免了关于JITted代码应该存储在哪里,等待多长时间的问题。另一方面,它避免了代码因为有人将硬盘移动到具有不同CPU的机器而变得无效,例如。我怀疑JIT编译是大多数程序总时间的相对的一小部分。
现在你可以使用NGen“预先JIT”一个程序集 - 但是我认为它无法进行一些优化,如果你改变了生成的代码再次变得无效CPU等。
另请注意,.NET框架本身将在首次安装时运行后台服务,以便JIT编译框架库(这可能构成大多数应用程序运行的大部分代码)。据推测,如果有必要,它可以重新编译......我从未详细研究过它。