如果优化非常简单且没有反优化,JVM 能否对 JIT 编译的代码执行自适应优化

Can the JVM perform adaptive optimizations on JIT-compiled code if the optimization is really simple with no deoptimization

我还在做高性能的盗版Minecraft。我不知道如果优化真的很简单,没有优化,JVM 是否可以对JIT 编译的代码进行自适应优化。我担心由于大型方法和高级技术全程序优化,反优化会导致很多滞后。

如果您 运行 处于分层模式,JVM 会经历不同级别的优化,结合客户端和服务器 JIT。如果您禁用分层并坚持使用服务器层,那么发生的 deopt 情况就会减少。

然而,deopt 编译可能来自多种原因,例如在动态调度调用站点看到新子类时第一次抛出异常。 deopts 发生的原因是因为 JIT 代码做了一些假设并且这些假设已被违反。

为了完全避免 deopts,您将需要执行您的代码,使其遵循您可能在运行时遇到的所有 e 路径,然后再变热。实际上,这几乎是不可能的。您将不得不通过管道放置您的对象并抛出您可能会看到的所有异常以启动 JIT。

如果您想要高性能,您可能最好尝试减少程序产生的垃圾量,因为这是最常见的延迟形式。

大多数高性能 Java 服务器通过一组预热事务来工作,可以在启动时应用这些事务来预热 JIT 并尽可能减少垃圾产生。