Lambda vs匿名内部类性能:减少ClassLoader的负载?

Tom*_*iak 8 java performance lambda inner-classes java-8

我想知道lambdas在Java 8中有多大的好处.我同意有时使用lambdas可能更具可读性,但是它对性能方面有多大影响吗?或者主要是作为语法糖?我有时喜欢匿名的内部课程; 当我不经常使用lambda时,我真的会失去很多好处吗?

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

Thread t = new Thread(new Runnable() {
   public.....
});
Run Code Online (Sandbox Code Playgroud)

创建类似的类Sample$1.class.

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

Bre*_*ken 10

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

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


Dan*_*iel 8

阅读@Brett Okken链接的PDF后,我相信以下内容:

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

我会坚持以下几点:

  • 当几毫秒性能损失不成问题时(GUI内容等),使用Lambdas可读性
  • 将内部类用于经常调用的性能关键函数.