java是否有针对NGen这样的JVM的预编译器解决方案? 3 月,3 周 Questions & Answers 1312 我最近比较了JVM和CLR平台,并讨论了JIT编译的影响。我所引起的讨论。NET使用NGen工具预编译代码的能力,这将消除JIT编译的需要。Java平台中是否有一个等价物
# 1 楼答案 对。从Java9开始,您可以。您正在寻找的功能称为提前编译(AOT) 目前使用的JVM主要有两种: HotSpot(及其变体),它是Oracle的主要JVM李> OpenJ9,最初来自IBM李> OpenJ9 在OpenJ9中,只需使用-Xshareclasses:persistent选项运行Java虚拟机。这会导致VM将编译后的二进制文件存储到缓存中,并在系统引导期间保持该缓存。它不会强制JavaVM在所有情况下都使用预编译代码,因为在许多情况下,即时(JIT)代码可以执行得更快。JVM将根据具体情况选择是否使用缓存的二进制文件。当缓存的AOT方法运行时,它还可以由实时(JIT)编译器进一步优化 详情请浏览: https://www.eclipse.org/openj9/docs/aot/ https://www.eclipse.org/openj9/docs/xshareclasses 热点(OpenJDK) HotSpot(OpenJDK)构建现在包括一个实验性VM,它可以完全预编译所有内容,称为GraalVM。您可以使用jaotc可执行文件手动创建本机二进制文件注意:这目前仅在Linux(可能还有Mac)系统上可用 有关如何使用jaotc编译器的详细信息,请访问: https://docs.oracle.com/javase/10/vm/java-hotspot-virtual-machine-performance-enhancements.htm#JSJVM-GUID-F33D8BD0-5C4A-4CE8-8259-FD9D73C7C7C6 https://openjdk.java.net/jeps/295(这包括一个为java.base模块生成并使用AOT库的示例)李> 注意:jaotc不像OpenJ9共享类标志那样简单易用
# 2 楼答案 我听到最多的本机编译器是ExcelsiorJet-Java虚拟机和本机编译器。有关更多详细信息,请参见http://www.excelsior-usa.com/jet.html。基本上,您可以将项目转换为单个可执行文件,而无需使用常规Java打包 他们已经存在很长一段时间了(2001年我加入Java行列时他们就在这里,现在他们也在这里。一周前我刚刚听说一家公司是如何使用他们的解决方案的,并且对其感到满意) 大约几年前,在JavaONE,我还遇到了一两位产品的开发人员,他们告诉我,他们很活跃,而且做得很好
# 3 楼答案 我个人不知道有什么(你可以看看launch4j、jexe等选项,它们只是包装器,不像NGen),我不确定这是否可行。。。这个问题的答案涉及编译为本机代码的一些细节:Differences in JIT between Java and .Net
# 1 楼答案
对。从Java9开始,您可以。您正在寻找的功能称为提前编译(AOT)
目前使用的JVM主要有两种:
OpenJ9
在OpenJ9中,只需使用
-Xshareclasses:persistent
选项运行Java虚拟机。这会导致VM将编译后的二进制文件存储到缓存中,并在系统引导期间保持该缓存。它不会强制JavaVM在所有情况下都使用预编译代码,因为在许多情况下,即时(JIT)代码可以执行得更快。JVM将根据具体情况选择是否使用缓存的二进制文件。当缓存的AOT方法运行时,它还可以由实时(JIT)编译器进一步优化详情请浏览:
热点(OpenJDK)
HotSpot(OpenJDK)构建现在包括一个实验性VM,它可以完全预编译所有内容,称为GraalVM。您可以使用
jaotc
可执行文件手动创建本机二进制文件注意:这目前仅在Linux(可能还有Mac)系统上可用有关如何使用jaotc编译器的详细信息,请访问:
注意:jaotc不像OpenJ9共享类标志那样简单易用
# 2 楼答案
我听到最多的本机编译器是ExcelsiorJet-Java虚拟机和本机编译器。有关更多详细信息,请参见http://www.excelsior-usa.com/jet.html。基本上,您可以将项目转换为单个可执行文件,而无需使用常规Java打包
他们已经存在很长一段时间了(2001年我加入Java行列时他们就在这里,现在他们也在这里。一周前我刚刚听说一家公司是如何使用他们的解决方案的,并且对其感到满意)
大约几年前,在JavaONE,我还遇到了一两位产品的开发人员,他们告诉我,他们很活跃,而且做得很好
# 3 楼答案
我个人不知道有什么(你可以看看launch4j、jexe等选项,它们只是包装器,不像NGen),我不确定这是否可行。。。这个问题的答案涉及编译为本机代码的一些细节:Differences in JIT between Java and .Net