Impact de la réflexion sur les performances de création d'objets en Java
Lorsque les développeurs utilisent les capacités de réflexion de Java pour instancier des objets, des inquiétudes surgissent souvent quant aux performances ultérieures. implications. Pour évaluer ces problèmes, examinons si la création d'objets à l'aide de la réflexion plutôt que d'invoquer directement le constructeur de classe introduit des différences de performances significatives.
Selon la documentation officielle de Java sur la réflexion, il existe effectivement un impact notable sur les performances. Étant donné que la réflexion implique une résolution dynamique des types, certaines optimisations JVM ne peuvent pas être appliquées. Cela conduit à ce que les opérations réfléchissantes soient intrinsèquement plus lentes que leurs homologues non réfléchissantes.
Pour quantifier cette différence, considérez l'extrait de code suivant :
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 < 1,000,000; 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 < 1,000,000; i++) { A a = (A) Class.forName("misc.A").newInstance(); a.doSomeThing(); } System.out.println(System.currentTimeMillis() - start); } } class A { public void doSomeThing() { // Perform some task } }
Exécuter ce code sur un système Sun JRE 6u10 donne les résultats suivants :
Ces résultats démontrent une pénalité de performances significative lors de l'utilisation de la réflexion, qui est attribuée au coût d'exécution des recherches et de l'instanciation des classes d'exécution.
Même si nous optimisons le code de réflexion en effectuant la recherche de classe une seule fois avant d'instancier plusieurs objets, il y a toujours une performance hit :
En conclusion, la réflexion en Java entraîne un surcharge de performances substantielle par rapport aux invocations directes du constructeur. Bien qu'il puisse y avoir des cas d'utilisation spécifiques où une réflexion est nécessaire, il est important de prendre en compte les implications potentielles en termes de performances lors de l'examen de son utilisation, en particulier dans les applications critiques en termes de performances.
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!