我可以将Java编译为本机代码吗?

bar*_*oco 70 java compilation native-code

有没有办法从Java编译到独立(或库)机器代码而不需要JVM?

Jam*_*ery 38

曾经有一个名为GCJ的工具是GCC的一部分,但它已被删除.现在,GCC站点中的所有链接都重定向到他们的非GCJ等价物.

注意:这些评论都是我原来的答案,说你可以用GCJ将Java编译成本机代码.

  • 是的,gcj是最知名的.@ isola009:请记住,在编译为本机代码时,您可能正在使用Java通常默认拥有的*库*的子集(可能是一个非常小的子集).从各方面来看,Gnu相当不错,但远远落后于目前的JDK. (2认同)

Mar*_*ark 17

Excelsior JET是本机代码编译器的商业Java.

  • 以防万一,非商业项目有免费许可证. (3认同)

Rob*_*bAu 16

是!

Oracle一直在研究支持Native Images的GraalVm.点击此处:https: //www.graalvm.org/

本机映像 与GraalVM SDK原生图像特征有助于提高Java应用程序的启动时间,让他们有一个更小的空间.实际上,它将在JVM(在任何平台上)上运行的字节码转换为特定操作系统/平台的本机代码 - 这是性能的来源.它正在使用积极的提前(AOT)优化来实现良好的性能.

看更多:


Pet*_*rey 11

是的,JVM中的JIT完全适合您.

事实上,它可以产生比预先编译代码更快的代码,因为它可以根据代码在运行时的使用方式生成针对特定平台优化的代码.

即使将非常高的百分比编译为本机代码,JVM也会始终参与,因为您可以动态加载和运行字节代码.

  • 是的,你是正确的,JIT做到了并且做得很好.它不是一个独立的可执行文件,但是OP并没有问这个...... (15认同)
  • 您似乎建议只有JIT才能进行特定于平台的优化.我认为无论何时你运送字节码都是可能的.ART在安装时将字节码编译为本机代码,而不是JIT.彼得,你对此有何评论? (2认同)
  • OP提到,独立,它可以放弃任何类型的JIT:虽然JIT可以动态生成本机代码,但它永远不会是独立的. (2认同)
  • 我不相信 JIT 编译器能够像原生 AOT 编译器/链接器那样提供如此多的深度优化:编译和链接完全优化*应该*让任何计算机屈服;如果不是,那么编译器没有尽最大努力进行优化。 (2认同)