没有 JVM 的 Java

Posted

技术标签:

【中文标题】没有 JVM 的 Java【英文标题】:Java without JVM 【发布时间】:2012-11-13 08:37:42 【问题描述】:

只是想知道是否有任何 Java 实现可以在没有 JVM 的情况下工作。我感兴趣的原因仅仅是因为我很好奇,我想知道是否有任何“轻量级”Java 实现(没有附加所有 Sun 库)。

我也对在 C++ 中嵌入 Java 感兴趣,但在 C++ 中嵌入 JVM 对我来说似乎相当荒谬。我只想在我的 C++ 应用程序中利用一些 Java 语言特性,而不是利用所有琐碎的 Java API。

编辑:

我从我得到的很多答案中看到我需要澄清......

我最近开始开发使用 javascript 的 node.js 应用程序。 istelf 中的 JavaScript 是一种语言规范,它不会自动附带 DOM、window.open 等,尽管它有一段时间。我想知道是否有类似于 Google 的 v8 的东西,除了不是 JavaScript,而是 Java。最后,我不在乎是否不能用它编写 Hello World 应用程序,我只想能够将 Java 嵌入到 C++ 应用程序中,就像我可以使用 v8 或 SpiderMonkey 将 JavaScript 嵌入到 C++ 应用程序中一样。如果我能做到这一点,那么我可以在 C/C++ 中实现控制台输出,然后使该实现可以从 Java 中调用。

【问题讨论】:

Sun libs 和 JVM 是两个完全不同的东西,可以说 Java 的主要特性是最先进的垃圾收集器——显然是 JVM 特性。 你的意思是,可以将 Java 编译成 JVM 字节码以外的东西吗?或者哪个会将 JVM 字节码编译成别的东西?还是什么? JavaScript 是一种脚本语言,大多数脚本语言解释器的设计目的是让它们可以很容易地嵌入到另一种语言中(通常是编译语言,如 C/C++)。我不太确定为什么要将 Java 等编译语言嵌入到 C++ 等另一种编译语言中。最好使用 JavaScript 或 Python 或 Lua 等脚本语言解释器,如果您想为您的程序使用脚本语言,它们已经明确定义了用于嵌入的 API。 【参考方案1】:

有专为小型设备设计的轻量级 Java 处理器,例如 JOP

【讨论】:

有/曾经有几个本机Java CPU,例如参见Wikipedia。【参考方案2】:

你想要没有 API(标准库)的 Java VM 吗?

JRE 由 JVM (Virtual MAchine) 和标准库组成,我怀疑你能找到没有 JVM 的 java 实现......你可以找到一个编译器将 java 源代码编译为本机代码(采取看看GCJ),但不是没有 VM 的 Java 实现。

查看this wikipedia page 以了解一些替代 Java 实现。

【讨论】:

【参考方案3】:

有 GCJ(GNU Compiler for Java),但自从 OpenJDK 开源以来,该项目已被弃用。

【讨论】:

【参考方案4】:

正如其他人所暗示的,“JVM”是一种知道如何加载类、解释“字节码”和管理存储的机制。它本身不包含任何 java.lang... 的东西,除了需要一些类(String、Class 等)来表示 JVM 中的类和其他基本数据结构。

因此,没有 JVM 的 Java 只是一堆毫无意义的比特。

存在(或曾经)需要/不需要解释器的 Java 编译版本(尽管相当紧凑的解释器很容易构建)。原始类加载器和某种存储管理仍然是必要的,但类加载可以保持简单,并且对于短期应用(或存在特殊限制的应用),存储管理器不需要进行垃圾收集。

正如 pstanton 所建议的,有一些适用于小型设备的“轻量级”Java(或“类 Java”)实现。

【讨论】:

【参考方案5】:

恕我直言,你需要重新审视你真正想要的是什么。

Java 运行时由两个主要组件组成

运行代码的 JVM 附带的标准库。

你建议你想使用 Java,但没有这些你真的什么都没有了。

例如,如果没有库,您甚至无法编写“hello world”程序,因为 String 是 JDK 中的一个类。

【讨论】:

以上是关于没有 JVM 的 Java的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法通过添加 JVM args 来打印 Java 运行时内存信息

Android Studio-JAVA_HOME没有指向有效的JVM安装

怎么启动JAVA里的JVM?

如何启动JAVA里的JVM?

什么是JDK JRE JVM?

android studio提示没有JVM