Ja - absolut. Eine Klasse durch Reflektion nachzuschlagen, ist um ein Vielfaches teurer Zitieren von Java-Dokumentation
Da bei der Reflektion Typen verwendet werden, die dynamisch aufgelöst werden, können bestimmte Java Virtual Machine-Optimierungen nicht durchgeführt werden. Folglich haben reflektive Operationen eine geringere Leistung als ihre nicht reflektierenden Gegenstücke und sollten in Codeabschnitten vermieden werden, die häufig in performance-sensitiven Anwendungen aufgerufen werden.
Ja, der Benchmark ist in 15 Minuten einfach zu schreiben.
Generierter Code ist besser, selbst wenn Sie die reflektiven Accessoren zwischenspeichern, habe ich es versucht.
Hier ist es unter Java 7 64 Bits:
%Vor%Ergebnis:
%Vor%Ratio ist in der Nähe von 1870 w / o barrierefrei gesetzt. Wenn Sie es einstellen, sinkt das Verhältnis auf 83.
Ja, es macht einen erheblichen Leistungsunterschied, und es gibt eine Menge Benchmarking-Ergebnisse im Internet, um dies zu unterstützen.
Zum Beispiel: Ссылка - was scheint zu sagen, dass ein reflektierender Aufruf an Eine Methode get
oder set
ist ~ 50 mal langsamer als direkt auf das Feld zuzugreifen / zu aktualisieren. (Und das Abrufen / Setzen mit Field
Methoden ist noch langsamer.)
Nun sind diese Ergebnisse ziemlich alt und (scheinbar) wurde die Leistung der Reflektion in den letzten HotSpot JVMs verbessert. Eine grobe Faustregel ist jedoch "eine Größenordnung oder mehr langsamer".
Tags und Links java reflection