为什么 Kotlin 在解释 Brainfuck 时比 Java 快得多?

Why is Kotlin much faster than Java at interpreting Brainfuck?

在此Brainfuck v2.0 benchmark, the Java version seems to be equivalent to the Kotlin version,据我所知。

但是,它 运行 速度慢了一倍并且使用了更多的内存。这是为什么?

我希望它们具有非常相似的内存和速度特性,因为两者都 运行 在 JVM 上。

免责声明:Kotlin 基准代码是我贡献的结果。

如果您比较代码的 Java 和 Kotlin 版本,您会发现它们实际上是不同的。每个都使用相应编程语言的惯用方法来编码操作。

  • Java 版本使用 enum OpT 结合 class Op。对于 运行 brainfuck 代码,它在枚举上使用惯用的 Java switch (op.op) 来 select 要做什么。

  • Kotlin 版本在操作类型上使用 sealed class Op 和惯用的 Kotlin when (op),利用 Kotlin 的流敏感类型(也称为智能转换)来提高可读性代码.

事实证明,惯用的 Kotlin 代码在 JVM 上执行得更快(没有特别好的理由)。您可以使用与 Kotlin 中相同的方法重写 Java 代码,您将获得相同的性能,但是这样的 Java 代码在 Java 中看起来很难看并且不能被视为惯用的实现在 Java.