web-dev-qa-db-ja.com

Java 8ラムダと匿名内部クラスのパフォーマンスの違い

Java 8の前に、ラムダ機能は匿名の内部クラスを使用することで実現できます。例えば:

interface Lambda {
    void doStuff();
}

// ...

public void doWithCallback(Lambda callback) {
    // ...
    callback.doStuff();
}

// ...

doWithCallback(new Lambda { 
    public void doStuff() { 
        // ... 
    } 
});

パフォーマンスの観点から、このアプローチの使用と新しいJava 8ラムダの使用との間に違いはありますか?

51
csvan

オラクルは、ラムダと匿名クラスのパフォーマンスを比較した調査を投稿しました

JDK 8:Lambda Performance Study を参照してください。長さ74枚のスライドがあります。

要約:ウォームアップには時間がかかりますが、JITをインライン化すると、最悪の場合は匿名クラスと同じくらい速くなりますが、速くなる可能性があります。

79
dkatzel