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

使用 lambdas 或方法引用而不是普通的 java 方法是否有任何性能方面或其他优点?构造对象或调用方法的成本如何

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


江户川乱折腾
浏览 145回答 3
3回答

慕桂英546537

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

www说

我可能认为这个问题是关于Imperative与DeclarativeJava 编程的。因为 lambda/方法引用只能与匿名类性能进行比较。他们在执行前采取不同的步骤:Lambda      vs    Anonymous Classlinkage           class loadingcapture           instantiationinvocation        invocation总体基准测试表明,lambda 在“热”基准测试中要快一些,而在“冷”基准测试中要快得多。关于复杂的方法和集合处理,没有X比Y.您应该指定一个案例来比较性能基准,在某些情况下经典方法可以更快地工作,在某些情况下 - 功能。我可能会假设在大多数情况下经典方法会更快,尤其是在使用可变对象时。但是使用功能样式以并行方式处理集合要容易得多。流是延迟执行的,这是一个优势。Java 支持函数式编程、流和 lambda 是非常好的特性,但它们不是灵丹妙药。明智地使用它们。

陪伴而非守候

与传统的 Java 方法相比,使用 Java 8 API 有很多优点。Java 8 基本上专注于函数式风格(更多声明式,更少命令式)方法,现在我们可以使用 Java 8 以优雅流畅的函数式风格进行编程,并具有高阶函数。这可以导致代码简洁,错误更少,更易于理解、维护和并行化。最重要的是:支持不变性减少副作用更喜欢表达式而不是语句懒惰执行有很多要补充的,我只给了我的 2cents。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java