既然有这么多的 JIT 实现,每个 JIT 都会发出本机代码。那么为什么没有人制作像 JIT2EXE 这样的工具来将本机代码保存到本机可执行文件中呢?
4 回答
这个问题有点含糊,因为您没有明确指定您在谈论什么语言,在我的 .NET 领域,.NET 可执行文件在运行时进行了预编译,以加快加载时间。代码可以通过称为 NGEN 的进程生成为本机代码,该进程采用 .NET IL 代码并将其转换为处理器可以理解的二进制进程。通常 NGEN 代码存储在 'C:\Windows\Assembly\NativeImages_ {version} ' 中的文件夹中,其中版本代表 .NET Framework 版本。在这里查看 Jeffrey Richter 的CodeGuru,了解 NGEN 以及它可以在哪里使用以及何时使用它。在Codeproject上查看有关与本机二进制代码的统计/比较的这篇文章以及Daniel Pistelli也在这里。
你的意思是像ngen 之类的东西?
事实上,有许多 Java(或其他解释语言)到本地编译器。听说过gcj吗?
还有混合编译器将一些关键部分编译为本机代码,并将其他部分保留为字节码以节省空间。哈里萨十多年前就这样做了。
Java 代码首先编译为 C 代码,然后将其传递给常规 C 编译器以利用其优化。这样的代码可能会非常快。
当然,这种提前编译(相对于即时编译)取消了字节码形式的一些优点(尤其是可移植性和低内存占用),因此现实世界的应用程序相当少见。
您在问题中所说的(“没有人制作过像 JIT2EXE 这样的工具”)并不完全正确: