常见问题

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

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

Truffle上运行的Java也能在HotSpot JVM上运行吗? #

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

运行Espresso需要HotSpot JVM吗? #

不,不需要,它可以作为本机可执行文件正常运行。Espresso确实需要一个标准核心Java库(Java 8的rt.jar库或Java 11+的lib/modules文件,以及相关的本机库:libjavalibnio等)。

在GraalVM上运行Java已经带来了最高级别的优化,Espresso还会带来哪些好处? #

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

Espresso的许可证是什么? #

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

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

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

执行Espresso可以期待怎样的性能? #

目前的性能比HotSpot JVM慢2-3倍。它肯定还没有达到GraalVM提供的速度,但开发团队在创建了一个完全可用的Espresso运行时后,现在正致力于使其性能与GraalVM JIT相当。

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

是的,您可以使用GraalVM的Polyglot API在与主机Java VM不同的独立上下文中运行Java字节码。您甚至可以在Java 11、17或21应用程序中嵌入一个Java 8上下文(使用选项--java.JavaHome=/path/to/jdk8)。

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

无法将代理附加到Espresso。目前,请将-XX:+IgnoreUnrecognizedVMOptions添加到虚拟机选项中。

联系我们