31.5 Zusammenfassung
Das Reflection-API ist ohne Zweifel ein wichtiger Bestandteil von
Java. Es ist nicht nur Grundlage der Beans- und Serialisierungs-APIs,
sondern eröffnet dem Tool-Entwickler auch eine Fülle von
Möglichkeiten und Freiheiten bei der Entwicklung allgemein verwendbarer
Werkzeuge. Zu beachten ist allerdings, daß Zugriffe auf Methoden
und Membervariablen deutlich langsamer als bei direktem Zugriff ausgeführt
werden. Im experimentellen Vergleich ergaben sich typischerweise Unterschiede
um den Faktor 10 bis 100. Während auf der verwendeten Testmaschine
der Aufruf einer Methode mit einem double-Parameter
beispielsweise 120 ns. dauerte, wurden für denselben Aufruf per
Reflection etwa 7.0 µs. benötigt. Bei deaktiviertem Just-In-Time-Compiler
erhöhte sich die Zeit für den direkten Aufruf auf 620 ns.,
während der Reflection-Wert mit etwa 7.2 µs. nahezu unverändert
blieb. Beim Zugriff auf Membervariablen wurden ähnliche Unterschiede
gemessen. Bemerkenswert ist, daß der JIT bei Verwendung des
Reflection-APIs praktisch keine Geschwindigkeitsvorteile bringt, denn
alle nennenswerten Methoden sind native und können daher kaum
optimiert werden.
In diesem Kapitel wurden folgende Themen behandelt:
- Die Klassen Object
und Class.
- Dynamisches Laden und Instanzieren von Klassen.
- Aufruf parameterloser Methoden.
- Ein Hilfsprogramm zum Testen von Java-Klassen.
- Aufruf parametrisierter Methoden und das automatische Aus- und
Einpacken von primitven Typen in Wrapperklassen.
- Nachbilden von Funktionszeigern mit Reflection.
- Verwenden parametrisierter Konstruktoren.
- Zugriff auf Membervariablen.