Kotlin的性能调优变得轻松

精工电子数字计时器

我经常在http://slack.kotlinlang.org/上看到开发人员,想知道他们的哪些代码片段性能更高。 通常,其中一个片段类似于Java中的处理方式,而另一个则是Kotlin惯用的方式。 通常,一种假设是,通过添加语法糖,“ Kotlin方式”比更冗长的“ Java方式”要慢。 并非总是如此。

具有Java开发背景,每当我负责基准测试代码块/方法的性能时,我都会自动考虑这样做:

您不得不用Java写类似的东西多少次,认为必须有更好的方法?

更好的方法终于来了,同样,它来自科特林。

更直观,更简洁的代码,没有数学(尽管很基础)都意味着编写代码时出错的机会更少。

注意, measureTimeMillis (以及measureNanoTime )是标准的库函数。 在Kotlin中,当函数将lambda作为最后一个参数时,可以在函数调用后提供lambda,如下所示:

measureTimeMillis() {}

并且由于没有其他参数传递给函数,因此可以完全省略括号:

measureTimeMillis {}

让我们来看一个示例用法。 当处理整数时,我们将比较基本的for循环和Kotlin标准库中的forEach函数之间的性能:

当我都运行时,我为forLoopMillisElapsedforEachMillisEllapsed分别打印了3毫秒15毫秒 分别。 因此,我着手弄清楚性能差异的原因可能是什么。

IntelliJ IDEA使您可以使用“ 工具”>“ Kotlin”>“显示Kotlin字节码”>“反编译”轻松地将Kotlin代码反编译为Java。 让我们反编译上面的两个代码块并研究结果:

反编译了for循环的代码段包含:

反编译了forEach循环的代码段包含:

因此,可以得出这样的逻辑,即在这种特殊情况下,forEach函数比常规的for循环慢,这是由于在数组上进行迭代时分配Iterator和Iterable对象的开销。

因为使用Kotlin进行基本的代码性能测量非常容易,所以我期望使用measureTimeMillis 在我的代码中,相当向前。 这与研究反编译的Kotlin字节码一起,是了解Kotlin如何与JVM交互的好方法。 生成的代码是否总是最优的? 不一定—在代码性能,清晰度和简洁性之间总要权衡取舍。 但这是另一篇文章的主题。

From: https://hackernoon.com/basics-of-measuring-performance-in-kotlin-e1dec6c0fa95

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值