Auswirkungen der Reflexion auf die Objekterstellungsleistung in Java
Wenn Entwickler die Reflexionsfunktionen von Java nutzen, um Objekte zu instanziieren, treten häufig Bedenken hinsichtlich der nachfolgenden Leistung auf Implikationen. Um diese Bedenken zu bewerten, untersuchen wir, ob das Erstellen von Objekten mithilfe von Reflektion anstelle des direkten Aufrufs des Klassenkonstruktors erhebliche Leistungsunterschiede mit sich bringt.
Laut der offiziellen Java-Dokumentation zur Reflektion gibt es tatsächlich eine bemerkenswerte Auswirkung auf die Leistung. Da bei der Reflexion Typen dynamisch aufgelöst werden, können bestimmte JVM-Optimierungen nicht angewendet werden. Dies führt dazu, dass reflektierende Vorgänge im Vergleich zu nicht reflektierenden Gegenstücken von Natur aus langsamer sind.
Um diesen Unterschied zu quantifizieren, betrachten Sie den folgenden Codeausschnitt:
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 } }
Ausführen dieses Codes auf einem Sun JRE 6u10-System liefert folgende Ergebnisse:
Diese Ergebnisse zeigen eine erhebliche Leistungseinbuße bei der Verwendung von Reflektion, die auf die Kosten für die Durchführung von Laufzeitklassensuchen und Instanziierung zurückzuführen ist.
Selbst wenn wir den Reflexionscode optimieren, indem wir die Klassensuche nur einmal durchführen, bevor wir mehrere Objekte instanziieren, gibt es immer noch eine Leistung hit:
Zusammenfassend lässt sich sagen, dass Reflektion in Java a erheblicher Leistungsaufwand im Vergleich zu direkten Konstruktoraufrufen. Während es bestimmte Anwendungsfälle geben kann, in denen eine Überlegung erforderlich ist, ist es wichtig, die potenziellen Auswirkungen auf die Leistung zu berücksichtigen, wenn der Einsatz in Betracht gezogen wird, insbesondere bei leistungskritischen Anwendungen.
Das obige ist der detaillierte Inhalt vonWie stark wirkt sich die Verwendung von Reflection auf die Leistung der Objekterstellung in Java aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!