首页 > 解决方案 > Kotlin lambdas 是否与 Java lambdas 一样?

问题描述

这是此答案的后续问题。

但是当应用程序之前没有使用过 lambda 表达式时,甚至必须加载生成 lambda 类的框架(Oracle 当前的实现在后台使用 ASM)。这是十几个内部使用的类的减速、加载和初始化的实际原因,而不是 lambda 表达式本身

好的,Java 使用 ASM 在运行时生成类。我发现了这一点,如果我理解正确,基本上是说 Kotlin lambda 被编译为在运行时加载(而不是生成)的预先存在的匿名类。

如果我是正确的,Kotlin lambdas 与 Java 不同,不应该具有相同的性能影响。有人可以确认吗?

标签: kotlin

解决方案


当然,Kotlin 内置了对内联 lambda 的支持,而 Java 没有。Kotlin 代码中的许多 lambda 在运行时根本不对应任何对象。

但是对于那些不能内联的,是的,根据https://medium.com/@christian.c.carroll/exploring-kotlin-lambda-bytecode-8c2d15afd490似乎总是使用匿名类翻译。不幸的是,该帖子没有指定 Kotlin 版本(1.3.30 是当时可用的最新版本)。

我也会认为这是一个实现细节,至少在jvmTarget设置为"1.8"或更高时可能会根据 Kotlin 版本而改变;所以没有什么可以替代实际检查您自己的字节码。


推荐阅读