有像NGen这样的JVM预编译器解决方案吗?

时间:2013-04-10 08:44:29

标签: java jvm jit

我最近比较了JVM和CLR平台,并讨论了JI​​T编译的影响。我的讨论使得.NET能够使用NGen工具预编译代码,这将消除对JIT编译的需求。 Java平台中是否存在等价物?

3 个答案:

答案 0 :(得分:3)

我最常听到的本机编译器是Excelsior JET - Java虚拟机和本机编译器。有关详细信息,请参阅http://www.excelsior-usa.com/jet.html。基本上,您可以将项目转换为单个可执行文件,而无需通常的Java打包的麻烦。

他们已经存在了很长时间(他们在2001年加入Java排名时就在这里。他们现在就在这里。我刚刚听说一家公司如何使用他们的解决方案,并对此感到高兴。< / p>

大约几年前在JavaONE,我也遇到了一个或两个开发人员的产品,他们告诉我他们是现场和踢,并且做得很好。

答案 1 :(得分:1)

我个人都不知道(你可以看看像launch4j,jexe等选项,它们只是包装器,而不是NGen),而且我不确定它有多可行......回答这个问题涉及到编译为本机代码的主题的一些细节:Differences in JIT between Java and .Net

答案 2 :(得分:0)

是的。从Java 9开始,您可以。您要查找的功能称为提前(AOT)编译。

当今有两个主要的JVM在使用:

  • HotSpot(及其变体),它是Oracle的主要JVM。
  • OpenJ9,最初来自IBM。

OpenJ9

在OpenJ9中,只需使用-Xshareclasses:persistent选项运行Java虚拟机。这导致VM将已编译的二进制文件存储到缓存中,该缓存在整个系统引导过程中均保持不变。它不会强制Java VM在所有情况下都使用预编译的代码,因为在很多情况下,JIT(Just In Time,简称JIT)代码可以更快地执行。 JVM将视情况选择是否使用缓存的二进制文件。运行缓存的AOT方法时,还可以通过即时(JIT)编译器对其进行进一步优化。

有关详细信息,请访问:

热点(OpenJDK)

HotSpot(OpenJDK)构建现在包括一个实验性VM,可以完全预编译所有东西,称为GraalVM。您可以使用jaotc可执行文件手动创建本机二进制文件。 注意:目前仅在Linux(可能还有Mac)系统上可用。

有关如何使用jaotc编译器的详细信息,请访问:

注意:jaotc并不像OpenJ9共享类标记那样简单。