Implications sur les performances des expressions Lambda dans Java 8
Lors de l'itération sur une collection à l'aide de l'API de flux dans Java 8, le nouveau sucre syntaxique introduit expressions lambda. Cependant, la question se pose : « Cela entraîne-t-il la création d'un objet Consumer anonyme sur le tas à chaque itération ? »
Un Lambda crée-t-il un nouvel objet sur le tas à chaque fois ?
La réponse est « non », mais ce n’est pas aussi simple que cela. Si une expression lambda ne capture aucune valeur, elle devient essentiellement un singleton qui est réutilisé pour chaque invocation.
Détails de mise en œuvre de la JVM
La machine virtuelle Java (JVM) a de la flexibilité dans la mise en œuvre des expressions lambda. La JVM d'Oracle crée actuellement au moins une instance par expression lambda, mais crée des singletons pour les expressions qui ne capturent pas de valeurs.
Implications sur les performances
Ce comportement a des implications sur les performances pour la mémoire consommation et temps d'exécution :
Quand utiliser l'ancien style pour Loop
Il est généralement recommandé d'utiliser des expressions lambda pour parcourir les collections car elles fournissent un code concis et lisible. Pour les structures de données multiniveaux extrêmement volumineuses, où les performances sont essentielles, vous pouvez envisager d'utiliser des boucles for traditionnelles. Cependant, la différence de performances sera probablement mineure à moins que la structure des données ne soit vraiment massive.
La spécification du langage Java
Le comportement des expressions lambda est couvert dans The Java ® Spécification du langage, chapitre « 15.27.4. Évaluation d'exécution des expressions Lambda ». Il permet une flexibilité de mise en œuvre, permettant à la JVM d'optimiser l'utilisation de la mémoire et le temps d'exécution.
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!