


Méthode de mise en cache de référence dans Java 8 : un examen détaillé
Introduction
Lorsque vous travaillez avec Les références aux méthodes de Java 8, une question se pose concernant les avantages potentiels de la mise en cache. Cet article explore les implications de la mise en cache des références de méthodes et fournit des conseils sur les cas où cela peut être avantageux.
Distinguer l'exécution d'un site d'appel et d'une référence de méthode
Il est crucial de différencier entre les exécutions fréquentes du même site d'appel avec des lambdas sans état ou avec état et les utilisations fréquentes de références de méthode à la même méthode par différents sites d'appel.
Exemple d'analyse
Considérez les exemples suivants :
Runnable r1 = null; for (int i = 0; i <p>Ici, le même site d'appel est exécuté deux fois, produisant un lambda sans état, et l'implémentation affichera "shared".</p><pre class="brush:php;toolbar:false">Runnable r1 = null; for (int i = 0; i <p>Avec cet exemple, le même site d'appel est exécuté deux fois, produisant un lambda contenant une référence à une instance du Runtime, et l'implémentation affichera "non partagé" mais "classe partagée".</p><pre class="brush:php;toolbar:false">Runnable r1 = System::gc, r2 = System::gc; System.out.println(r1 == r2 ? "shared" : "unshared"); System.out.println(r1.getClass() == r2.getClass() ? "shared class" : "unshared class");
En revanche, le dernier exemple inclut deux sites d'appel distincts produisant une référence de méthode équivalente, mais à partir de Java 8.0.05, elle affichera "non partagé" et "classe non partagée".
JVM Comportement
La machine virtuelle Java (JVM) joue un rôle important dans la gestion des références de méthodes. Il utilise une instruction d'invocation dynamique, qui fait référence à une méthode d'amorçage JRE dans LambdaMetafactory. Le compilateur fournit les arguments nécessaires pour générer la classe d'implémentation lambda.
La JVM a la flexibilité de mémoriser et de réutiliser l'instance CallSite formée lors du premier appel. Pour les lambdas sans état et les sites d'appel uniques, la JVM crée généralement un ConstantCallSite comprenant un MethodHandle vers un objet constant.
D'autre part, pour les lambdas avec des paramètres (par exemple, this::func), la JVM peut mettez-les en cache, mais cela implique une surcharge supplémentaire liée au maintien d'une carte entre les paramètres et les instances lambda. Actuellement, la JVM ne met pas en cache ces lambdas. Ce comportement s'applique de la même manière aux références de méthode à la même méthode cible créées par différents sites d'appel.
Considérations sur la mise en cache
Sur la base des points susmentionnés, les références de méthode de mise en cache peuvent donner des résultats différents, mais pas nécessairement de meilleures performances. L'impact sur les performances doit être mesuré avant de mettre en œuvre des mécanismes de mise en cache. Il existe des cas spécifiques où la mise en cache peut être bénéfique :
- Lorsque plusieurs sites d'appel font référence à la même méthode
- Lorsque le lambda est créé dans le constructeur/classe initialiser
- Lorsque le site d'utilisation sera exécuté simultanément par plusieurs threads
- Lorsque les performances inférieures de la première invocation lambda sont un préoccupation
Conclusion
La mise en cache des références de méthode peut être une technique d'optimisation dans certains scénarios. Cependant, la décision de mettre en cache doit être basée sur une analyse minutieuse du code et des exigences de performances spécifiques. La gestion des références de méthode par la JVM fournit une base solide pour optimiser l'utilisation de lambda et des références de méthode dans Java 8.
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!

JVM implémente les fonctionnalités WORA de Java via l'interprétation des bytecodes, les API indépendantes de la plate-forme et le chargement de classe dynamique: 1. ByteCode est interprété comme du code machine pour assurer le fonctionnement de la plate-forme multiplié; 2. Différences de système d'exploitation abstraites API standard; 3. Les classes sont chargées dynamiquement au moment de l'exécution pour assurer la cohérence.

La dernière version de Java résout efficacement les problèmes spécifiques à la plate-forme grâce à l'optimisation JVM, aux améliorations de la bibliothèque standard et à la prise en charge de la bibliothèque tierce. 1) L'optimisation JVM, comme le ZGC de Java11, améliore les performances de la collecte des ordures. 2) Améliorations standard des bibliothèques, telles que le système de module de Java9, réduisant les problèmes liés à la plate-forme. 3) Les bibliothèques tierces fournissent des versions optimisées à plateforme, telles que OpenCV.

Le processus de vérification Bytecode de JVM comprend quatre étapes de clé: 1) Vérifiez si le format de fichier de classe est conforme aux spécifications, 2) vérifiez la validité et l'exactitude des instructions de bytecode, 3) effectuer une analyse du flux de données pour assurer la sécurité du type et 4) équilibrant la minutie et les performances de la vérification. Grâce à ces étapes, le JVM garantit que seul le bytecode sécurisé est exécuté, protégeant ainsi l'intégrité et la sécurité du programme.

Java'splatformIndependenceNallowsApplicationStorunonanyOperatingSystemwithajvm.1) singlecodeBase: writeAndCompileonceForAllPlatFatForms.2) Easyupdates: UpdateByteCodeForsImulTaneousDoyment.4)

L'indépendance de la plate-forme de Java est continuellement améliorée grâce à des technologies telles que JVM, la compilation JIT, la normalisation, les génériques, les expressions Lambda et ProjectPanama. Depuis les années 1990, Java est passé de la JVM de base à la JVM moderne haute performance, garantissant la cohérence et l'efficacité du code sur différentes plates-formes.

Comment Java atténue des problèmes spécifiques à la plate-forme? Java implémente la plate-forme indépendante de la plate-forme via JVM et des bibliothèques standard. 1) Utilisez Bytecode et JVM pour abstraction des différences du système d'exploitation; 2) La bibliothèque standard fournit des API multiplateformes, telles que les chemins de fichier de traitement des classes de chemins et le codage des caractères de traitement de la classe Charset; 3) Utilisez des fichiers de configuration et des tests multiplateformes dans les projets réels pour l'optimisation et le débogage.

Java'splatformIndependanceNhancesMicRoservices ArchitectureByoFerringDeploymentFlexibilité, cohérence, évolutivité, etportabilité.1) DeploymentFlexibilityAllowsMicroserviceStorUnonanyPlatformwithajvm.2) CohérenceaCossserviceSiceSIGLYPLATFORMWithajvm.2)

Graalvm améliore l'indépendance de la plate-forme de Java de trois manières: 1. Interopérabilité transversale, permettant à Java d'interopérer de manière transparente avec d'autres langues; 2. 3. Optimisation des performances, le compilateur Graal génère un code machine efficace pour améliorer les performances et la cohérence des programmes Java.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft

SublimeText3 version anglaise
Recommandé : version Win, prend en charge les invites de code !

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

SublimeText3 version chinoise
Version chinoise, très simple à utiliser
