【问题标题】:Lambdas execution inside Java 8 distribution [duplicate]Java 8发行版中的Lambdas执行[重复]
【发布时间】:2016-04-12 21:09:50
【问题描述】:

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

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

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

【问题讨论】:

标签: java lambda functional-programming jvm java-8


【解决方案1】:

编译器不会“替换” lambda 函数。 lambda 只是成为普通接口的实例,这些接口被传递给作为普通 Java 代码运行的普通 Java 库。

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

【讨论】:

  • 我怀疑 JIT 对 lambdas 有什么了解。由于它们与任何其他代码一样由方法和类组成,因此 JIT 将尝试识别已知模式,无论相关代码是否源自 lambda 表达式。仅对 lambda 表达式的代码应用潜在的优化将是不必要的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多