Maison > Java > javaDidacticiel > La mise en cache des références de méthodes dans Java 8 offre-t-elle des gains de performances ?

La mise en cache des références de méthodes dans Java 8 offre-t-elle des gains de performances ?

Patricia Arquette
Libérer: 2024-11-17 06:27:03
original
903 Les gens l'ont consulté

Does Method Reference Caching in Java 8 Offer Performance Gains?

Mise en cache des références de méthodes dans Java 8

Java 8 a introduit les références de méthodes, qui fournissent une syntaxe concise pour référencer les méthodes et les constructeurs d'instance. Cependant, des inquiétudes subsistent quant à l'utilité de la mise en cache de ces références. Pour comprendre ce sujet, il est essentiel de faire la distinction entre la mise en cache des références de méthode pour les exécutions fréquentes du même site d'appel et leur mise en cache pour les utilisations multiples d'une référence de méthode par différents sites d'appel.

Mise en cache des références de méthode pour le même site d'appel

Considérez le code suivant où Foo.func() est appelé à plusieurs reprises via doSomethingWithAFunc() :

class Foo {

   Y func(X x) {...} 

   void doSomethingWithAFunc(Function<X,Y> f){...}

   void hotFunction(){
        doSomethingWithAFunc(this::func);
   }

}
Copier après la connexion

La mise en cache de this::func serait censée éliminer le création de nouvelles instances de classe anonymes à chaque fois que hotFunction() est exécuté. Cependant, la JVM optimise déjà ce scénario en réutilisant l'instance de site d'appel créée lors du premier appel du lambda. La mise en cache de la référence de méthode dans ce cas est superflue.

Mise en cache de référence de méthode pour différents sites d'appel

En revanche, considérons l'exemple suivant :

Runnable r1 = System::gc;
Runnable r2 = System::gc;
Copier après la connexion

Ici, deux sites d'appel différents produisent des références de méthode à la même méthode cible System.gc() dans java.lang.System. La JVM est autorisée à partager une seule instance lambda entre elles, mais l'implémentation actuelle dans Java 8 ne le fait pas. Cela est dû aux avantages incertains en termes de performances liés à la maintenance d'un cache d'instances lambda.

Bonnes pratiques

Compte tenu de ces considérations, il n'est généralement pas recommandé de mettre en cache les références de méthodes, à moins qu'il n'y ait sont des problèmes de performance spécifiques qui ont été identifiés grâce à la mesure. La mise en cache peut potentiellement modifier le comportement d'exécution du programme, et elle ne doit être envisagée que dans les cas suivants :

  • Lorsque de nombreux sites d'appel font référence à la même méthode
  • Lorsque le lambda est créé lors de l'initialisation du constructeur ou de la classe et :

    • Sera appelé simultanément par plusieurs threads
    • Souffre d'une pénalité de performances lors de l'invocation initiale

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal