如何在没有JVM的情况下运行Java程序?

6

我有一个简单的Java程序,只会打印“Hello World”。在没有安装JVM的机器上是否可能打印出来?但编译器是存在的。


其实我认为它需要运行环境。 - Prathibha Chiranthana
简短回答,不行。编译后的Java程序只是字节码,需要由虚拟机来解释执行。 - MadProgrammer
如果是一个简单的程序,你可以使用GNU Java Compiler将其编译成本地机器代码,并在没有任何JVM的情况下运行它。 - zakinster
可能是Java without JVM的重复问题。 - Mateusz Dymczyk
您可以使用在线JVM(例如jdoodle.com等)运行程序。这对于教育目的来说已经足够了,可以在不安装JVM的情况下编辑和运行Java代码。 - nogard
显示剩余2条评论
4个回答

11
你可以使用类似于这样的工具将Java字节码编译成机器码: http://en.wikipedia.org/wiki/GNU_Compiler_for_Java 或者你可以使用许多现有的Java到C/C++转换器之一制作一个C/C++版本,然后进行编译。(在Google上搜索“Java C Converter”)
警告:包括链接的GNU编译器在内,我从未尝试过这些工具,因此无法对其有用性或质量做出任何陈述。

3
@SplinterReality已经向您介绍了一些编译器(在Google上搜索“java bytecode to native code compiler”将显示更多选项)。
我想进一步解释一下,因为有些人可能有点困惑:
JVM是一个程序,它接受Java字节码,这是通过在Java源代码上运行javac获得的(或者以其他方式生成)。字节码只是一组JVM理解的指令,它存在是为了给您提供一组平台无关的操作码。然后,JVM的任务是将这些操作码映射到本机指令,这就是JVM是平台相关的原因。这就是为什么当您将Java源代码编译为Java字节码时,可以在每个平台上运行它的原因。
这就是为什么无论您拥有Java源代码还是字节码,都可以将其直接编译为本机代码(平台相关的,实际上有时JVM,更准确地说是JIT,在看到需要时将其编译为本机代码)。但是,JVM不仅仅是字节码解释 - 例如,您需要注意垃圾收集。
所以答案是:是的,但是你真的想这样做吗?除非您要在某些嵌入式系统上运行它,否则我真的看不到任何理由。

1
实际上,许多嵌入式系统也运行Java,有些微控制器和智能卡芯片可以直接执行Java字节码(通常是子集,但仍然是硬件中的Java)。 - SplinterReality

1

-1
如果该程序是一个单文件源代码(未编译为字节码),那么您可以使用这里这里这里也可以;)
只需将其放在那里,然后按编译和运行
但它仅适用于简单的东西,并且您必须拥有源代码。
如果有一个允许从用户PC上传类的网站,我不会感到惊讶。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接