Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Kotlin中的空方法是否存在性能成本?_Performance_Kotlin - Fatal编程技术网

Performance Kotlin中的空方法是否存在性能成本?

Performance Kotlin中的空方法是否存在性能成本?,performance,kotlin,Performance,Kotlin,在Kotlin中,清空方法会导致性能损失,还是会被忽略 我运行了以下测试代码,成本似乎可以忽略不计: fun emptyMethod() {} for(max in listOf(1000, 10000, 100000, 1000000)){ val start = Instant.now().toEpochMilli() for(i in 0..max) { emptyMethod() } val millis= Instant.now().t

在Kotlin中,清空方法会导致性能损失,还是会被忽略

我运行了以下测试代码,成本似乎可以忽略不计:

fun emptyMethod() {}

for(max in listOf(1000, 10000, 100000, 1000000)){
    val start = Instant.now().toEpochMilli()
    for(i in 0..max) {
        emptyMethod()
    }
    val millis= Instant.now().toEpochMilli() - start
    println("$max iterations: $millis millis.")
}

// 1000 iterations: 0 millis.
// 10000 iterations: 0 millis.
// 100000 iterations: 4 millis.
// 1000000 iterations: 10 millis.
我正在进行验证,我想使用一个空方法进行文档编制(例如,
petName.mayBeNull()
),以避免将来的注释腐烂。

在中,对空函数的调用仍然存在

通常,发出JVM字节码的编译器不会运行低级优化,例如您认为可能发生的优化,因为:

  • 为了调试的目的,将字节码保留在源代码结构附近是很有用的
  • JVM实现中的JIT编译器和AOT编译器在低级别优化方面要好得多,特别是因为它们可以考虑特定的体系结构
因此,对空函数的调用在运行时是否具有零成本取决于您使用的JVM运行时(或AOT编译器)的实现


您可以尝试在运行时从JIT编译的代码中进行反汇编,但具体方法取决于JVM实现。例如,使用OpenJDK,这可以通过以下Q&A中引用的工具来完成:

IDE中是否有任何工具可以向您显示反汇编?@MatthewLayton我不知道,我正在使用IntelliJ IDEA。我检查了市场,但没有找到任何插件。为什么你认为空方法调用比注释更好,或者更能防止腐败?@gidds很高兴你问:-)在我的例子中,如果有人将
petName
重命名为
animalCompanion
,或者完全删除属性(!),评论将保持不变。方法调用将与属性名一起更新,如果删除,则不会编译。我认为注释更适合作为“结构化注释”,而不是调用空方法。