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

Avant Java 8, lambda fonctionnalité pourrait être obtenu en utilisant les 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 performance, est-il une différence entre encore à l'aide de cette approche et à l'aide de la nouvelle Java 8 lambdas?

  • Pourquoi ne pas créer des calculs simples à l'aide de la Date de chaque approche?
  • Avez-vous l'esprit en expansion sur ce qu'est un "Java 8 à la fermeture de l'est? Au moins, en fonction de ceci question telle chose ne semble pas exister...
  • Sans doute, même les classes internes anonymes créer des fermetures, mais à un immuable de liaison (variable) contexte. Aurait-on argumenter Haskell n'a pas de fermetures en raison de l'immutabilité des liaisons..? Mais, en tout cas, "les Expressions Lambda" serait sans doute plus clair dans le contexte.
  • Vous devriez supposer généralement Java 8 est au moins aussi efficace, voire plus efficace que la classe anonyme approche.
  • Je pourrais avoir les définitions de mal, se penchera sur cette question. La question reste la même, cependant, dans le sens que je suis en demandant au sujet de essentiellement équivalent des moyens à mettre en œuvre des rappels.
  • Mes excuses; je ne suis pas très familier avec les concepts de la programmation fonctionnelle. Ce que tu dis a du sens pour moi, après quelques recherches sur google si.
  • À partir de ce que je peux dire (JLS 15.27.4), un lambda de l'exécution peut entraîner la création d'un nouvel objet d'une classe qui implémente une interface fonctionnelle (même anonyme intérieure de l'exemple de classe?), mais il pourrait en résulter un objet existant, si elle n'a pas besoin d'en créer un nouveau. JL n'est pas clair sur qui. Si c'est le deuxième cas, le résultat pourrait être une amélioration de la performance.
  • "Avant Java 8, lambda fonctionnalité pourrait, dans une certaine mesure, être réalisé en utilisant les classes internes anonymes. "Il pourrait, dans toute la mesure du être réalisé avec des classes anonymes.

InformationsquelleAutor csvan | 2014-06-18