在正常的Java方法上使用lambda或方法引用是否有任何性能方面或其他优点?构建对象或调用方法的成本如何
我想知道传统更新与Java 8更新之间的区别
答案 0 :(得分:1)
与传统的Java方法相比,使用Java 8 API有很多优点。
Java 8基本上侧重于功能样式(更多声明式,更少命令式)方法,现在使用Java 8,我们可以以优雅,流畅的功能样式和高阶功能进行编程。这可能导致代码简洁 错误更少,更易于理解,维护和并行化。
最上面的:
还有很多需要补充的地方,我只给了我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@7e7514ca
与Imperative
编程。
因为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代码,所以我想大多数情况下您都可以滥用它。