Heim >Java >javaLernprogramm >Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode
In diesem Artikel wird hauptsächlich das Implementierungsprinzip der Java-Methodenreflexion ausführlich vorgestellt, das einen gewissen Referenzwert hat.
Der Blogger sagte: Der Java-Reflexionsmechanismus ist Im laufenden Zustand können Sie für jede Klasse alle Eigenschaften und Methoden dieser Klasse kennen und jede ihrer Methoden und Eigenschaften aufrufen wird als Reflexionsmechanismus der Java-Sprache bezeichnet. In diesem Artikel analysiert Zhan Xiaolang das Implementierungsprinzip (Quellcode) des Java-Reflexionsmechanismus. Interessierte Schüler können diesen Artikel einige Minuten lang lesen, um ihn zu verstehen.
Text
public class ReflectCase { public static void main(String[] args) throws Exception { Proxy target = new Proxy(); Method method = Proxy.class.Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode("run"); method.Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode(target); } static class Proxy { public void run() { System.out.println("run"); } } }Bestanden Der Reflexionsmechanismus von Java kann zur Laufzeit jede Methode eines Objekts aufrufen, wenn auf diese Weise eine große Anzahl von Aufrufen erfolgt. Gibt es dann irgendwelche Leistungs- oder Speicherrisiken? Um den Reflexionsmechanismus der Methode vollständig zu verstehen, können wir nur mit dem zugrunde liegenden Code beginnen!
Method Get
Rufen Sie Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode der Class-Klasse auf, um das Methodenobjekt Method mit dem angegebenen Methodennamen und den angegebenen Parametern abzurufen.Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode
Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode
-Methode. Method.copy()
Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode
Rufen Sie die Liste der in dieser Klasse deklarierten Methoden aus dem Cache oder der Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode ab. Die Implementierung ist wie folgt:Methodenaufrufe
Nachdem Sie die angegebene Methodenobjektmethode erhalten haben, können Sie deren Aufrufmethode wie folgt aufrufen:
In der ReflectionFactory-Klasse gibt es zwei wichtige Felder: noInflation (Standardwert falsch) und inflationThreshold (Standardwert 15). In der checkInitted-Methode können Sie -Dsun.reflect.inflationThreshold=xxx und -Dsun.reflect.noInflation= übergeben true Setzen Sie diese beiden Felder zurück und legen Sie sie nur einmal fest. Wenn noInflation false ist, gibt die Methode newDetaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeImpl das DelegatingDetaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeImpl-Objekt zurück:
Tatsächlich DelegatingDetaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeImpl-Objekt Es ist ein Proxy-Objekt, das für den Aufruf der Invoke-Methode des Delegaten des delegierten Objekts verantwortlich ist. Der Delegate-Parameter ist derzeit ein NativeDetaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeImpl-Objekt, daher ruft die Invoke-Methode der letzten Methode die Invoke-Methode des NativeDetaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeImpl-Objekts auf :
Der inflationThreshold in der ReflectionFactory-Klasse wird hier verwendet. Nachdem der Delegat die Aufrufmethode 15 Mal aufgerufen hat, wird das Detaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeImpl-Objekt über die genericMethod generiert Methode der Detaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeGenerator-Klasse und als Delegate-Objekt festgelegt, sodass die Methode beim nächsten Aufruf ausgeführt wird, wird die Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode()-Methode des neu erstellten Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode-Objekts aufgerufen. Hier ist zu beachten, dass die Methode „generateMethod“ beim Generieren eines Detaillierte Erläuterung der Prinzipien der Java-ReflexionsimplementierungsmethodeImpl-Objekts den entsprechenden Bytecode im Speicher generiert und ClassDefiner.defineClass aufruft, um das entsprechende Klassenobjekt zu erstellen. Die Implementierung lautet wie folgt:
In der Implementierung der ClassDefiner.defineClass-Methode wird bei jedem Aufruf ein Detaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode-Klassenladeobjekt generiert:
Eine neue Klasse Der Loader wird hier jedes Mal generiert. Aus Leistungsgründen können diese generierten Klassen in einigen Fällen entladen werden, da das Entladen von Klassen nur dann recycelt werden kann, wenn der ursprüngliche Klassenlader verwendet wird Dies kann dazu führen Diese neu erstellten Klassen sollen niemals entladen werden. Aus gestalterischer Sicht möchten wir nicht, dass diese Klassen immer im Speicher vorhanden sind.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Prinzipien der Java-Reflexionsimplementierungsmethode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!