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 调用,但这并没有什么神奇之处。
Java8 中的 Lambdas 提供了一种将问题定义为语句并保持代码简洁的好方法。但是它们是否改变了语句在 JVM 中的执行方式?
假设我正在编写一个 lambda,它流式传输对象列表并根据条件过滤它们,returns 过滤后的值作为相同数据类型的列表。我的 lambda 基本上有一个过滤器和一个收集器。 当这段代码发送到VM时,编译器是否将lambda函数替换为传统的if循环和for循环?
我问这个是因为虚拟机仍然是一样的,它最初是为命令式编程风格设计的。 Java 8 中真正改变的是我们定义问题陈述的方式 (FP)。我的理解正确吗?
编译器不"replace" lambda 函数。 lambdas 只是成为普通接口的实例,这些接口被传递给普通的 Java 库,这些库得到 运行 作为普通的 Java 代码。
JIT 确实进行了一定程度的优化,使其能够更智能地内联和简化 lambda 调用,但这并没有什么神奇之处。