【问题标题】:How to run java program without JVM?如何在没有 JVM 的情况下运行 java 程序?
【发布时间】:2014-10-26 09:25:19
【问题描述】:

我有一个简单的 java 程序,它只会打印 Hello World。可以在不使用机器上安装的 JVM 的情况下打印吗?但是编译器在那里。

【问题讨论】:

  • 其实我认为它需要环境来运行..
  • 简答,不。一个编译好的Java程序只是一个字节码,它需要被虚拟机打断
  • 如果它是一个简单的程序,您可以使用GNU Java Compiler将其编译为本机代码并在没有任何JVM的情况下运行它。
  • Java without JVM的可能重复
  • 您可以使用在线 JVM 运行您的程序,例如 jdoodle.com 和许多其他网站。这足以用于教育目的,无需安装 JVM 即可编辑和运行 Java 代码

标签: java jvm


【解决方案1】:

您可以使用以下代码将 Java 字节码编译为机器码: http://en.wikipedia.org/wiki/GNU_Compiler_for_Java

或者您可以使用任何 Java 到 C/C++ 转换器来制作 C/C++ 版本,然后编译它。 (在 Google 上搜索“Java C 转换器”)

警告:我从未尝试过任何这些,包括链接的 GNU 编译器,因此我无法证明它们的有用性或质量。

【讨论】:

    【解决方案2】:

    @SplinterReality 已经为您指出了一些编译器(谷歌搜索“java 字节码到本机代码编译器”会显示更多选项)。

    看到有些人有点困惑,我会进一步扩展:

    JVM 是一个采用 java bytecode 的程序,你可以通过在你的 java source code 上运行 javac 来获得它(或者你以其他方式生成它)。字节码只是 JVM 理解的一组指令,它可以为您提供一组与平台无关的一致操作码。然后将这些操作码映射到本机指令是 JVM 的工作,这就是 JVM 依赖于平台的原因。这就是为什么当您将 java 源代码编译为 java 字节码时,您可以在每个平台上运行它。

    这就是为什么,无论您有 java 源代码还是字节码,您都可以将其直接编译为本机代码(取决于平台,实际上有时这正是 JVM,更准确地说是 JIT 所做的 - 它编译当它看到需要时,将内容添加到本机代码中)。 JVM 还不仅仅是字节码解释——例如,您需要处理垃圾收集。

    所以答案是:是的,但是你真的想这样做吗?除非您想在某些嵌入式系统上运行它,否则我真的没有任何理由这样做。

    【讨论】:

    • 其实很多嵌入式系统也是运行Java的,有直接执行java字节码的微控制器和智能卡芯片。 (通常是一个子集,但仍然是硬件中的 java)
    【解决方案3】:

    是的,可以在没有 JVM 的情况下运行 java 程序,尽管有一些限制。除了 http://en.wikipedia.org/wiki/GNU_Compiler_for_Java 之外,还有 GraalVM 原生图像生成器,可以使用:https://www.graalvm.org

    【讨论】:

      【解决方案4】:

      如果该程序是一个文件源代码(未编译为字节码),那么您可以;) HerehereHere 也可以;)

      把它放在那里然后按compile and run

      但它只适用于简单的东西,而且你必须有源代码。

      如果有一个网站允许从用户 PC 上传课程,我不会感到惊讶

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-15
        • 2022-10-30
        • 2016-03-22
        相关资源
        最近更新 更多