0

当程序终止或重新启动时,JIT 编译器生成的机器代码/指令会发生什么。JIT 编译是否再次发生?如果是这样,它为什么要使用这种方法?

为了保持范围简单,我想具体了解.NET,但为了其他人的利益,欢迎回答其他实现

4

1 回答 1

2

JIT 编译是否再次发生?

是的,一般来说。

如果是这样,它为什么要使用这种方法?

一方面,它避免了 JITted 代码应该存储在哪里、存储多长时间等问题。另一方面,它避免了由于有人将硬盘驱动器移动到具有不同 CPU 的机器而导致代码无效。我怀疑人们认为 JIT 编译在大多数程序所花费的总时间中只占相对较小的一部分。

现在您可以使用NGen对程序集进行“预 JIT” - 但我认为它无法进行一些优化,并且如果您更改 CPU 等,生成的代码再次变得无效。

另请注意,.NET 框架本身将在首次安装时运行后台服务,以 JIT 编译框架库(这可能构成大多数应用程序运行的大部分代码)。大概它有一些聪明的地方可以在必要时重新编译……我从来没有仔细研究过它。

于 2012-09-13T02:59:11.480 回答