web-dev-qa-db-fra.com

Différence de performances entre Java 8 lambdas et classes internes anonymes

Avant Java 8, la fonctionnalité lambda pouvait être obtenue en utilisant des classes internes anonymes. Par exemple:

interface Lambda {
    void doStuff();
}

// ...

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

// ...

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

En termes de performances, y a-t-il une différence entre continuer à utiliser cette approche et utiliser les nouveaux Java 8 lambdas?

51
csvan

Oracle a publié une étude comparant les performances entre Lambdas et les classes anonymes

Voir JDK 8: Lambda Performance Study par Sergey Kuksenko, qui fait 74 diapositives.

Résumé: lent à s'échauffer mais lorsque JIT s'aligne, le pire des cas est aussi rapide que la classe anonyme mais peut être plus rapide.

79
dkatzel