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

发布于 2024-09-04 19:11:33 字数 50 浏览 8 评论 0原文

有没有什么方法可以在不需要 JVM 的情况下从 Java 编译为独立(或库)机器代码?

Is there any way to compile from Java to standalone (or library) machine code without requiring a JVM?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

尽揽少女心 2024-09-11 19:11:33

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

注意:这些评论都引用了我原来的回答,说你可以使用 GCJ 将 Java 编译为本机代码。

There used to be a tool called GCJ that was part of GCC, but it's been removed. Now, all the links in the GCC site re-direct to their non-GCJ equivalents.

NB: the comments all refered to my original answer saying you can compile Java to native code with GCJ.

九公里浅绿 2024-09-11 19:11:33

是的!

Oracle 一直在开发支持 Native Images 的 GraalVm。检查此处:https://www.graalvm.org/

原生图像
GraalVM SDK 的本机映像功能有助于缩短 Java 应用程序的启动时间并减少占用空间。实际上,它将 JVM(在任何平台上)上运行的字节码转换为特定操作系统/平台的本机代码 - 这就是性能的来源。它使用积极的提前 (AOT) 优化来实现良好的性能。

查看更多:

Micronaut 平台使用 GraalVM 制作原生微服务:

简单示例

 public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello, Native World!");
     }
 }

编译 java:

 javac HelloWorld.java

编译为本机:

 native-image HelloWorld

运行(仅需要可执行文件):

 ./HelloWorld 

输出

 Hello, Native World!

Yes!

Oracle has been working on the GraalVm, which supports Native Images. Check here: https://www.graalvm.org/

Native Image
The native image feature with the GraalVM SDK helps improve the startup time of Java applications and gives them a smaller footprint. Effectively, it's converting bytecode that runs on the JVM (on any platform) to native code for a specific OS/platform — which is where the performance comes from. It's using aggressive ahead-of-time (AOT) optimizations to achieve good performance.

See more:

The Micronaut platform uses GraalVM to make native microservices:

Simple example

 public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello, Native World!");
     }
 }

Compiling java:

 javac HelloWorld.java

Compiling to native:

 native-image HelloWorld

Running (only the executable is needed):

 ./HelloWorld 

Output

 Hello, Native World!
回忆凄美了谁 2024-09-11 19:11:33

Excelsior JET 是一个商业 Java 到本机代码的编译器。但该产品已于 2019 年 5 月停产。

Excelsior JET is a commercial Java to native code compiler. However, it was discontinued in May 2019.

笑饮青盏花 2024-09-11 19:11:33

是的,JVM 中的 JIT 正是为您做的。

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

即使很大一部分被编译为本机代码,JVM 也始终会参与其中,因为您可以动态加载和运行字节代码。

Yes, the JIT in the JVM does exactly that for you.

In fact it can produce faster code than compiling the code in advance as it can generate code optimised for the specific platform based on how the code is used at runtime.

The JVM is always involved even if a very high percentage is compiled to native code as you could load and run byte code dynamically.

套路撩心 2024-09-11 19:11:33

另一种可能性是 RoboVM
但是,它似乎仅适用于 LinuxiOSMac OS X

截至今天,该项目似乎仍然存在,与网上的一些帖子相反 声称该项目已经死亡

Another possibility would be RoboVM.
However, it only seems to work on Linux, iOS and Mac OS X.

As of today, the project still seems somewhat alive contrary to some posts online claiming the project to be dead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文