当前位置: 首页 > 知识库问答 >
问题:

GraalVM能否将超前编译与自适应优化结合起来?

子车青青
2023-03-14

据我所知,JVM可以以不同的方式工作:

解释器:一遍又一遍地从字节码到本机代码的运行时转换。

现在GraalVM可以编译,提前将字节码编译成本机代码。

是否可以提前编译字节码并在热点上做自适应优化(一般情况下,特别是使用GraalVM)?

“澄清”我的意思并不是AOT将字节码的部分编译为本机代码,而将其他部分留为字节码,以便在运行时对其执行热点JIT编译。这就是IBM的Excelsior Jet Java实现似乎要做的,我到目前为止已经读到的内容。我的意思是AOT编译整个字节码,并在运行时用自适应优化的热点重新编译替换热点部分。这需要将优化后的代码正确地连接/插入到现有的AOT编译代码中。[/澄清]

我不是这方面的专家,所以请告诉我是否有任何假设是错误的。

共有1个答案

寿伟
2023-03-14

参见JEP 295。它提到了不同的AOT模式,包括分层AOT,它提供C1编译的代码和分析检测,然后可以在运行时用C2进行优化。

 类似资料:
  • GraalVM系统显然无法将Spring应用程序编译为本机映像。

  • 在前面的标准编译安装中,第一步是./configure[30],它会根据Makefile.in生成Makefile文件,然后make根据Makefile自动编译软件 通常在一个源码包中,已经包含了configure脚本和Makefile文件,作为课外知识,我们大致了解一下怎么生成这两个文件 autoconf autoconf用来生成configure脚本,它可以检查系统特性、编译环境、环境变量、软

  • 问题内容: 假设我在C代码中有类似的内容。我知道您可以使用a 代替,以使编译器不对其进行编译,但是出于好奇,我问编译器是否也可以解决此问题。 我认为这对于Java编译器来说更为重要,因为它不支持。 问题答案: 在Java中,if内的代码甚至都不是已编译代码的一部分。它必须编译,但不会写入已编译的字节码。它实际上取决于编译器,但我不知道没有对它进行优化的编译器。规则在JLS中定义: 优化的编译器可能

  • 如果关闭了编译器优化(gcc-o0...),那么说'volatile'关键字没有区别是可以的吗? 我制作了一些示例“C”程序,并且仅当打开编译器优化时,才在生成的汇编代码中看到易失性和非易失性之间的区别,即((gcc-o1....)。

  • 我有一个(Spring开机/Spring云)应用程序(微服务'MS'架构)与Netflix工具构建,我想将其部署在kubernetes集群(一个主和2个小跟班),以从其编排事实中获得优势。 顺便说一下,我在集群上创建了一个库贝-dns服务,我还尝试用3个Pod挂载一个eureka服务(名为eurekaservice)。另一方面,我运行了一个带有下一个eureka配置的微服务: 好消息是集群上的每个

  • 我目前有警卫声明: 但是,我只想在变量时执行保护块。我想跳过保护语句,如果需要。有没有比带有返回的if语句更好的方法来做到这一点? 编辑: 如何将其简化为单个防护装置?