在正常的Java方法中,有没有使用LAMBDAS或方法引用的性能方面或其他优点?构建对象或调用方法的成本
我想知道传统和Java 8更新之间的区别。
Java LAMBDAS的可能副本比匿名类慢20倍
方法引用比lambda有实际的优势。
查看stackoverflow.com/questions/1784664/…
lambda与匿名内部类性能的可能重复:减少类加载器上的负载?
我可以假设这个问题是关于EDCOX1,4,对EDCOX1,5的Java编程。
因为lambda/方法引用只能与匿名类性能进行比较。
他们在执行之前采取了不同的步骤:
Lambda vs Anonymous Class
linkage class loading
capture instantiation
invocation invocation
总体基准测试表明,lambda在"热"基准测试中速度更快,在"冷"基准测试中速度更快。
对于复杂的方法和集合处理,没有像X这样的总体性能基准比Y更快。
您应该指定一个案例来比较性能基准,在某些情况下,经典方法可以更快地工作,在某些情况下是功能性的。我可以假设,在大多数情况下,经典方法会更快地工作,尤其是在处理可变对象时。
但是,以与功能风格并行的方式处理集合要容易得多。流被懒散地执行,这有什么好处。
Java支持函数编程、流和lambDas是非常好的特性,但它们不是银弹。明智地使用它们。
lambda和匿名类,不是都有互惠互利的关系吗?
@普通人,他们是程序员的概念关系,但他们被不同的对待,但编译器。
Java引入字节码指令EDOCX1,0来构造匿名类,然后EDCOX1,1,EDCOX1,2。因此,如果lambdas Java生成了实现类并在运行时生成字节代码。一旦字节代码生成,步骤的其余部分与普通方法调用相同。因此,在lambda/方法引用only overhead is constructing an anonymous class and generate its byte at runtime的情况下。所以lambda比普通方法调用慢一些。
为什么我们需要消费者或供应商等,而不是用常规的传统方法编写逻辑
@shyamsanju可以解释一下你的问题。
我们可以用任何Java 8更新的API替换传统方法吗?
使用Java 8 API优于传统Java方法有很多优点。
Java 8主要关注功能风格(更多声明性、少命令性)的方法,现在Java 8可以以优雅、流畅、功能性的方式编写程序,具有更高阶的功能。这会导致代码简洁它的错误更少,更容易理解、维护和并行化。
顶部:
有利于不变性
减少副作用
表达式优先于语句
怠速执行
还有很多要补充的,我刚刚给了我2块钱。
你可以在谷歌上搜索到几篇文章,但它们似乎都表明lambda的性能不如循环和匿名类。我不知道Java 9或Java 10是否改进了LAMBDAS的性能,但是我找不到任何似乎暗示他们做的事情。
我认为朗姆达的主要优点是阅读能力。也就是说,我看到一些lambda代码根本不可读,所以我猜这就像大多数情况下你可以滥用它。
我们需要普通的Java方法的消费者或供应商吗?
要使用lambda,不能。例如,我可以使用toString()对String的列表执行myList.stream().map(item -> item.toString).collect(Collectors.toList()) to convertmylist。但是如果你是在写自己的lambda,我相信你必须使用Consumer或者它的一个变体(就像是一个二元消费者和一些其他的???)我对后者没有太多了解,所以我不能百分之百确定。