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

时间:2019-01-28 11:36:05

标签: java java-8

在正常的Java方法上使用lambda或方法引用是否有任何性能方面或其他优点?构建对象或调用方法的成本如何

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

4 个答案:

答案 0 :(得分:1)

与传统的Java方法相比,使用Java 8 API有很多优点。

Java 8基本上侧重于功能样式(更多声明式,更少命令式)方法,现在使用Java 8,我们可以以优雅,流畅的功能样式和高阶功能进行编程。这可能导致代码简洁 错误更少,更易于理解,维护和并行化。

最上面的

  1. 不变性
  2. 减少副作用
  3. 优先使用表达式而不是语句
  4. 懒执行

还有很多需要补充的地方,我只给了我2美分。

答案 1 :(得分:1)

Java引入了字节代码指令invokedynamic来构造匿名类,然后为generate byte code构造lambdas因此,对于lambdas,java会生成实现类并在运行时生成字节码。字节码生成后,其余步骤与常规方法调用相同。因此,对于lambda /方法,请参考only overhead is constructing an anonymous class and generate its byte at runtime。因此,lambda比普通方法调用要慢一些。

答案 2 :(得分:1)

我可以假设问题是关于Java中的WELD-000049: Unable to invoke public void com.controller.ContactsController.init() on com.controller.ContactsController@7e7514caImperative编程。

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

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

Declarative

总体基准测试表明,lambda在“热”基准测试中要快一些,而在“冷”基准测试中要快得多。

关于复杂的方法和集合处理,没有像Lambda vs Anonymous Class linkage class loading capture instantiation invocation invocation 这样的整体性能基准比X快。

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

但是用功能样式以并行方式处理集合要容易得多。流是延迟执行的,这有什么好处。

Java支持功能编程,流和lambda,这是一个很好的功能,但是它们不是灵丹妙药。明智地使用它们。

答案 3 :(得分:0)

您可以在Google上找到几篇文章,但它们似乎都表明Lambda的性能不如循环和匿名类。我不知道Java 9或Java 10能否完全提高lambda的性能,但是我找不到任何似乎暗示它们可以做到的东西。

我认为lambda的主要好处是可读性。就是说,我已经看到了一些根本不易读的lambda代码,所以我想大多数情况下您都可以滥用它。