常见问题解答

在 Truffle 上运行的 Java 是否实现了作为 Truffle 解释器运行的 Java 语言? #

不完全是:它实现了作为 Truffle 解释器运行的 Java 虚拟机。这意味着它只能在您使用您最喜欢的 Java 编译器(例如 javac)或构建工具(Maven、Gradle 等)将 Java 程序编译成 Java 字节码(类、JAR 文件等)后运行。在 GraalVM 家族中,这类似于 WebAssembly 或 LLVM 解释器:虽然两者都可以运行 C 程序,但它们必须首先由 C 编译器编译。

在 Truffle 上运行的 Java 是否也运行在 HotSpot JVM 上? #

与使用 Truffle 框架 实现的其他语言一样,它可以作为本地可执行文件或在 HotSpot JVM 上运行。目前,仅在 Linux x64 和 macOS x64 上才能在 HotSpot JVM 上运行。我们计划将此功能扩展到其他平台。

运行 Espresso 是否需要 HotSpot JVM? #

不,不需要,它可以很好地作为本地可执行文件运行。Espresso 需要一个标准的核心 Java 库(适用于 Java 8 的 rt.jar 库或适用于 Java 11+ 的 lib/modules 文件,以及相关联的本地库:libjavalibnio 等)。

在 GraalVM 上运行 Java 已经带来了最高级别的优化,Espresso 会给我带来什么好处? #

  • Espresso 继承了 Truffle 框架提供的广泛工具。这意味着,对于代码覆盖率和性能分析,您将不再需要依赖外部工具。
  • 另一个重要方面是 Espresso 改进了主机 Java VM 和在 Truffle 上运行的 Java 程序之间的隔离。
  • 此外,Espresso 可以在本地可执行文件的上下文中运行,同时仍然允许动态加载字节码!
  • 最后,您可以享受增强型热插拔功能带来的好处,这将有助于提高您的工作效率。

Espresso 的许可证是什么? #

Espresso 是 Java 虚拟机的实现。它是开源的,并根据 GNU 通用公共许可证第二版 (GPLv2) 提供为免费软件。

我可以在生产中运行 Espresso 吗? #

可以,您可以在 Linux x64 上运行。对其他平台的支持仍在实验阶段。

我可以预期执行 Espresso 会有什么样的性能? #

目前性能比 HotSpot JVM 慢 2-3 倍。它肯定还没有达到 GraalVM 提供的速度,但是创建了完全可工作的 Espresso 运行时后,开发团队现在正专注于使其与 GraalVM JIT 一样高效。

我可以在我的应用程序中嵌入在 Truffle 上运行的 Java 吗? #

可以,您可以使用 GraalVM 的多语言 API 在与主机 Java VM 分开的上下文中运行 Java 字节码。您甚至可以在 Java 11、17 或 21 应用程序中嵌入 Java 8 上下文(使用选项 --java.JavaHome=/path/to/jdk8)。

当我尝试从 IDE 运行我的应用程序时,为什么我会看到“未识别的选项:-javaagent:…/idea_rt.jar…”? #

无法将代理附加到 Espresso。暂时将 -XX:+IgnoreUnrecognizedVMOptions 添加到 VM 选项中。

联系我们