Performance Kotlin中的空方法是否存在性能成本?
在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
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编译器在低级别优化方面要好得多,特别是因为它们可以考虑特定的体系结构
您可以尝试在运行时从JIT编译的代码中进行反汇编,但具体方法取决于JVM实现。例如,使用OpenJDK,这可以通过以下Q&A中引用的工具来完成:IDE中是否有任何工具可以向您显示反汇编?@MatthewLayton我不知道,我正在使用IntelliJ IDEA。我检查了市场,但没有找到任何插件。为什么你认为空方法调用比注释更好,或者更能防止腐败?@gidds很高兴你问:-)在我的例子中,如果有人将
petName
重命名为animalCompanion
,或者完全删除属性(!),评论将保持不变。方法调用将与属性名一起更新,如果删除,则不会编译。我认为注释更适合作为“结构化注释”,而不是调用空方法。