Java 8 分布内的 Lambdas 执行

Lambdas execution inside Java 8 distribution

Java8 中的 Lambdas 提供了一种将问题定义为语句并保持代码简洁的好方法。但是它们是否改变了语句在 JVM 中的执行方式?

假设我正在编写一个 lambda,它流式传输对象列表并根据条件过滤它们,returns 过滤后的值作为相同数据类型的列表。我的 lambda 基本上有一个过滤器和一个收集器。 当这段代码发送到VM时,编译器是否将lambda函数替换为传统的if循环和for循环?

我问这个是因为虚拟机仍然是一样的,它最初是为命令式编程风格设计的。 Java 8 中真正改变的是我们定义问题陈述的方式 (FP)。我的理解正确吗?

编译器不"replace" lambda 函数。 lambdas 只是成为普通接口的实例,这些接口被传递给普通的 Java 库,这些库得到 运行 作为普通的 Java 代码。

JIT 确实进行了一定程度的优化,使其能够更智能地内联和简化 lambda 调用,但这并没有什么神奇之处。