java-optimierung nitpick: ist es schneller, etwas zu casten und es eine ausnahme auslösen zu lassen, als instanceof aufzurufen, um es vor dem cast zu überprüfen?

Bevor jemand etwas sagt, frage ich dies nur aus Neugier; Ich plane keine vorzeitige Optimierung auf der Grundlage dieser Antwort.

Meine Frage bezieht sich auf die Geschwindigkeit beim Verwenden von Reflektion und Casting. Das Standard-Sprichwort lautet "Reflexion ist langsam". Meine Frage ist, welcher Teil genau langsam ist und warum; besonders im Vergleich, wenn etwas ein Elternteil einer anderen Instanz ist.

Ich bin mir ziemlich sicher, dass der Vergleich der Klasse eines Objekts mit einem anderen Klassenobjekt ungefähr so ​​schnell ist wie jeder Vergleich. Vermutlich wird nur ein direkter Vergleich von Singleton-Objekten durchgeführt, die bereits im Status des Objekts gespeichert sind. aber was ist, wenn eine Klasse ein Elternteil der anderen ist?

Ich denke normalerweise aninstanceof Ich war ungefähr so ​​schnell wie die reguläre Klassenüberprüfung, aber heute habe ich darüber nachgedacht und es scheint, als müsse eine gewisse Reflexion 'unter den Kulissen' stattfindeninstanceof arbeiten. Ich habe online nachgesehen und ein paar Stellen gefunden, an denen jemand etwas gesagt hatinstanceof ist langsam; vermutlich aufgrund von Überlegungen, die erforderlich sind, um die Eltern eines Objekts zu vergleichen?

Dies führte zur nächsten Frage: Was ist mit dem Casting? Wenn ich etwas als Objekt wirke, bekomme ich keinClassCastException. Dies ist jedoch nicht der Fall, wenn ein Objekt an ein übergeordnetes Element von sich selbst übergeben wird. Im Wesentlichen mache ich eineinstanceof Aufruf oder Logik zu diesem Zweck, wenn ich die Besetzung zur Laufzeit mache, nicht wahr? Ich habe noch nie zuvor einen Hinweis gehört, dass das Wirken eines Objekts langsam sein könnte. Zugegeben, nicht alle Abgüsse stammen von einem Elternteil des bereitgestellten Objekts, aber viele Abgüssesind zu Elternklassen. Noch nie hat jemand angedeutet, dass dies langsam sein könnte.

Also was ist es? Istinstanceof wirklich nicht so langsam? Sind beideinstanceof und Casting zur Elternklasse irgendwie langsam? oder gibt es einen Grund, warum ein Cast schneller gemacht werden kann als eininstanceof Anruf?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage