java - 为什么 Kotlin 解释 Brainfuck 的速度比 Java 快得多?

标签 java kotlin benchmarking jvm-hotspot brainfuck

在此Brainfuck v2.0 benchmarkJava version似乎相当于 Kotlin version据我所知。

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

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

最佳答案

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

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

  • Java 版本使用enum OpTclass Op 相结合。为了运行 Brainfuck 代码,它在枚举上使用惯用的 Java switch (op.op) 来选择要执行的操作。

  • Kotlin 版本在利用 Kotlin 的流敏感类型(也称为智能类型)的操作类型上使用密封类 Op 和惯用的 Kotlin when (op)强制转换)以获得漂亮且可读的代码。

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

关于java - 为什么 Kotlin 解释 Brainfuck 的速度比 Java 快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57277267/

相关文章:

java - java中通用数组的解决方法

kotlin - Moshi @Json 注释不适用于 com.github.kittinunf.fuel.moshi.moshiDeserializerOf?

java 堆大小按部分增长达到某个限制

android - 使用改造多部分/表单数据发送字符串和图像

javascript - 检查系统是否能流畅显示JS效果

node.js - 如何对基于 websocket 的 Node.js 应用程序进行基准测试?

java - BufferedImage 闪烁问题

java - 创建方法并更新字符串

java - java 将一个json对象附加到另一个json对象

Kotlin 协程 - 使用协程作用域/上下文的不同选项?