Kotlin 对 JVM 性能有什么影响?

What is Kotlin's impact on JVM performance?

我知道 programming/lambdas 并不是 Java 世界的最佳选择,因为 极高性能 是我们的目标。 Kotlin 使用 inline 关键字解决该问题。

当编译 Kotlin 并内联 lambda 时,它实际上是在创建更大的方法,并且 JIT 有一个 N 字节的硬上限来内联到本机代码。考虑到这一点,Kotlin 的 inline 不会损害 JIT 的内联并因此影响性能吗?

此外,我注意到 Kotlin 在编译后的代码中添加了很多 nullchecks,这些检查是非常小的方法并且肯定是由 JIT 内联的,但是由于调用量,这不也是一种性能吗问题?

那么,如果您的目标是尽可能高的性能,Kotlin 对 JVM 的影响是什么?

边节点:我知道,我知道..“过度优化是万恶之源”,“你不应该关心这个级别的性能”。

您可以覆盖用于字节码的内联值的限制。有关详细信息,请参阅 中的答案。

我很惊讶字节码中有很多空检查。通常 Java 不会这样做,而是让 CPU 以更高的性能自动处理这些问题。

虽然它们可能会被 JVM 的 JIT 忽略,所以一旦预热就不会成为问题,但是如果您想要更高的性能,您可能希望让您的服务器通过虚拟数据运行以确保 JIT 是热身。没有什么比热 JIT 遇到编译事件并不得不重新经历这一切更糟糕的了。

如果您留意 JIT 编译事件并留意未编译或联机的“热方法”消息,那么您可以单独调整这些方法。

一般来说,如果你避免使用 lambda,你会发现 JVM 不需要做那么多的内联,更糟糕的是不需要做那么多的分配。 Lambda 在意外捕获状态和导致分配发生方面非常糟糕。理想情况下,在高 throughput/low 延迟系统中,您希望尽可能避免分配。