Lambda和方法引用超过类中的普通Java方法

Lambdas and Method References Over Normal Java methods in a Class

在正常的Java方法中,有没有使用LAMBDAS或方法引用的性能方面或其他优点?构建对象或调用方法的成本

我想知道传统和Java 8更新之间的区别。


我可以假设这个问题是关于EDCOX1,4,对EDCOX1,5的Java编程。

因为lambda/方法引用只能与匿名类性能进行比较。

他们在执行之前采取了不同的步骤:

1
2
3
4
Lambda      vs    Anonymous Class
linkage           class loading
capture           instantiation
invocation        invocation

总体基准测试表明,lambda在"热"基准测试中速度更快,在"冷"基准测试中速度更快。

对于复杂的方法和集合处理,没有像X这样的总体性能基准比Y更快。

您应该指定一个案例来比较性能基准,在某些情况下,经典方法可以更快地工作,在某些情况下是功能性的。我可以假设,在大多数情况下,经典方法会更快地工作,尤其是在处理可变对象时。

但是,以与功能风格并行的方式处理集合要容易得多。流被懒散地执行,这有什么好处。

Java支持函数编程、流和lambDas是非常好的特性,但它们不是银弹。明智地使用它们。


Java引入字节码指令EDOCX1,0来构造匿名类,然后EDCOX1,1,EDCOX1,2。因此,如果lambdas Java生成了实现类并在运行时生成字节代码。一旦字节代码生成,步骤的其余部分与普通方法调用相同。因此,在lambda/方法引用only overhead is constructing an anonymous class and generate its byte at runtime的情况下。所以lambda比普通方法调用慢一些。


使用Java 8 API优于传统Java方法有很多优点。

Java 8主要关注功能风格(更多声明性、少命令性)的方法,现在Java 8可以以优雅、流畅、功能性的方式编写程序,具有更高阶的功能。这会导致代码简洁它的错误更少,更容易理解、维护和并行化。

顶部:

  • 有利于不变性
  • 减少副作用
  • 表达式优先于语句
  • 怠速执行
  • 还有很多要补充的,我刚刚给了我2块钱。


    你可以在谷歌上搜索到几篇文章,但它们似乎都表明lambda的性能不如循环和匿名类。我不知道Java 9或Java 10是否改进了LAMBDAS的性能,但是我找不到任何似乎暗示他们做的事情。

    我认为朗姆达的主要优点是阅读能力。也就是说,我看到一些lambda代码根本不可读,所以我猜这就像大多数情况下你可以滥用它。