kotlin - Kotlin lambdas 是否与 Java lambdas 一样?
问题描述
这是此答案的后续问题。
但是当应用程序之前没有使用过 lambda 表达式时,甚至必须加载生成 lambda 类的框架(Oracle 当前的实现在后台使用 ASM)。这是十几个内部使用的类的减速、加载和初始化的实际原因,而不是 lambda 表达式本身
好的,Java 使用 ASM 在运行时生成类。我发现了这一点,如果我理解正确,基本上是说 Kotlin lambda 被编译为在运行时加载(而不是生成)的预先存在的匿名类。
如果我是正确的,Kotlin lambdas 与 Java 不同,不应该具有相同的性能影响。有人可以确认吗?
解决方案
当然,Kotlin 内置了对内联 lambda 的支持,而 Java 没有。Kotlin 代码中的许多 lambda 在运行时根本不对应任何对象。
但是对于那些不能内联的,是的,根据https://medium.com/@christian.c.carroll/exploring-kotlin-lambda-bytecode-8c2d15afd490似乎总是使用匿名类翻译。不幸的是,该帖子没有指定 Kotlin 版本(1.3.30 是当时可用的最新版本)。
我也会认为这是一个实现细节,至少在jvmTarget
设置为"1.8"
或更高时可能会根据 Kotlin 版本而改变;所以没有什么可以替代实际检查您自己的字节码。
推荐阅读
- node.js - Mongoose 连接多个数据库
- java - 如何针对两个条件执行 RealmQuery
- batch-file - 需要使用批处理文件(添加到系统路径)的当前路径(我在终端中写入“addpath”)
- javascript - Firefox 排序数组错误
- javascript - 避免许多 if 语句的最佳方法是什么?
- java - 如何使用 xslt 将父节点命名空间复制到子元素?
- symfony - 我无法在 Symfony 3.4 中使用 Monolog 的特定通道将日志写入文件
- bash - 在 bash 中的命令之前设置变量
- javascript - 刷新页面返回 [object CSSStyleDeclaration]
- php - 如何通过 cPanel 将网页永久重定向到另一个网页