有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    对。从Java9开始,您可以。您正在寻找的功能称为提前编译(AOT)

    目前使用的JVM主要有两种:

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

    OpenJ9

    在OpenJ9中,只需使用-Xshareclasses:persistent选项运行Java虚拟机。这会导致VM将编译后的二进制文件存储到缓存中,并在系统引导期间保持该缓存。它不会强制JavaVM在所有情况下都使用预编译代码,因为在许多情况下,即时(JIT)代码可以执行得更快。JVM将根据具体情况选择是否使用缓存的二进制文件。当缓存的AOT方法运行时,它还可以由实时(JIT)编译器进一步优化

    详情请浏览:

    热点(OpenJDK)

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

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

    注意:jaotc不像OpenJ9共享类标志那样简单易用

  2. # 2 楼答案

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

    他们已经存在很长一段时间了(2001年我加入Java行列时他们就在这里,现在他们也在这里。一周前我刚刚听说一家公司是如何使用他们的解决方案的,并且对其感到满意)

    大约几年前,在JavaONE,我还遇到了一两位产品的开发人员,他们告诉我,他们很活跃,而且做得很好

  3. # 3 楼答案

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