【问题标题】:Lambda vs anonymous inner class performance: reducing the load on the ClassLoader?Lambda 与匿名内部类性能:减少 ClassLoader 的负载?
【发布时间】:2014-07-15 17:06:14
【问题描述】:

我想知道 lambdas 在 Java 8 中有多大的好处。我同意有时使用 lambdas 可能更具可读性,但它对性能方面真的有这么大的影响吗?还是主要集中在语法糖上? 有时我更喜欢匿名内部类;不一直使用 lambda 真的会失去很多好处吗?

唯一的?大?在我看来,性能提升是我们实际上并没有创建类加载器必须在程序开始时加载的类——例如创建许多线程:

Thread t = new Thread(new Runnable() {
   public.....
});

创建像Sample$1.class 这样的类。

除此之外,除了代码的可读性或可维护性等之外,是否还有任何性能或其他隐藏的收益?隐藏在 JVM 中的某个地方?我见过与此类似的问题,但大多数都集中在视觉方面;我对此不感兴趣。在观看 Java 8 Lambdas Hacking 和 Venkat Subramaniam 之后,这个问题是出于好奇。

【问题讨论】:

    标签: java performance lambda java-8 inner-classes


    【解决方案1】:

    Oracle 的演示文稿涵盖了一些性能差异。似乎有很多因素会影响 lambda 与匿名类的性能。

    http://www.oracle.com/technetwork/java/jvmls2013kuksen-2014088.pdf

    【讨论】:

    【解决方案2】:

    阅读@Brett Okken 链接的 PDF 后,我相信以下观点成立:

    • 内部类在首次使用时性能稍慢,但似乎可以忽略不计。
    • Lambda 在经常调用时性能较慢,因为它们在调用时会建立更大的堆栈。

    我会坚持以下几点:

    • 当几毫秒的性能损失不是问题(GUI 等)时,使用 Lambda 提高可读性
    • 对经常调用的性能关键函数使用内部类。

    【讨论】:

    • 还请记住,lambda 不会导致对象创建,因此例如,如果您只是将 Runnables 提交给 Executor,您可能会看到时间和/或内存方面的性能改进。
    • @SinaMadani 如果没有对上下文变量的引用,则为真。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2014-05-08
    相关资源
    最近更新 更多