Maison > Java > javaDidacticiel > Dans quelle mesure la réflexion a-t-elle un impact sur les performances Java ?

Dans quelle mesure la réflexion a-t-elle un impact sur les performances Java ?

Patricia Arquette
Libérer: 2024-12-05 04:19:14
original
422 Les gens l'ont consulté

How Much Does Reflection Impact Java Performance?

La réflexion affecte-t-elle les performances Java ?

Créer des objets à l'aide de la réflexion, plutôt que d'appeler directement le constructeur de classe, entraîne sans aucun doute des pénalités de performances importantes. Les opérations de réflexion nécessitent une résolution de type dynamique, ce qui entrave les optimisations de la machine virtuelle Java.

La documentation Java sur la réflexion reconnaît cette différence de performances : "Étant donné que la réflexion implique des types résolus dynamiquement, certaines optimisations de la machine virtuelle Java ne peuvent pas être effectuées... réfléchies les opérations ont des performances plus lentes que leurs homologues non réfléchissantes. "

Un simple test révèle le différence :

public class Main {

    public static void main(String[] args) throws Exception {
        doRegular();
        doReflection();
    }

    public static void doRegular() throws Exception {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            A a = new A();
            a.doSomething();
        }
        System.out.println(System.currentTimeMillis() - start);
    }

    public static void doReflection() throws Exception {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            A a = (A) Class.forName("misc.A").newInstance();
            a.doSomething();
        }
        System.out.println(System.currentTimeMillis() - start);
    }
}
Copier après la connexion

Résultats :

  • Sans réflexion : 35ms
  • Avec réflexion : 465ms

Notez que ce test inclut à la fois la recherche et l'instanciation, mais même l'isolement de l'instanciation aboutit à un pénalité :

  • Sans réflexion : 30 ms
  • Avec réflexion (une recherche, une seule instanciation) : 47 ms

Ainsi, alors que les performances peuvent varier en fonction sur le contexte spécifique, elle reste significative lors du recours à la réflexion.

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