Klassifizierung von JVM-Klassenladern und übergeordnetem Delegationsmechanismus

Inhaltsverzeichnis

Vorwort

1. Klassifizierung von Klassenladern:

1.1 Starten Sie den Klassenlader (Bootstrap ClassLoader):

1.2 Erweiterung ClassLoader:

1.3 Anwendungsklassenlader:

1.4 Benutzerdefinierter Klassenlader:

2. Mechanismus zur elterlichen Delegation:

meine anderen Blogs


Vorwort

Der Klassenlader (ClassLoader) der Java Virtual Machine (JVM) ist dafür verantwortlich, den Bytecode einer Klasse in den Speicher zu laden und ihn in eine Laufzeitklasse umzuwandeln. Klassenlader haben in Java unterschiedliche Klassifizierungen, und der übergeordnete Delegierungsmechanismus ist ein Mechanismus für die Zusammenarbeit zwischen Klassenladern, um die Einzigartigkeit und Sicherheit von Klassen sicherzustellen.

 

1. Klassifizierung von Klassenladern:

1.1 Starten Sie den Klassenlader (Bootstrap ClassLoader):

Dies ist Teil der Java Virtual Machine und wird zum Laden der Kernklassenbibliothek von Java verwendet, beispielsweise der Klassen im java.lang-Paket. Es ist Teil der JVM und wird normalerweise in nativem Code und nicht in einer Java-Klasse implementiert.

1.2 Erweiterung ClassLoader:

ist für das Laden der Java-Erweiterungsklassenbibliothek verantwortlich, die sich in dem durch die Systemeigenschaft java.ext.dirs angegebenen Verzeichnis befindet. Normalerweise das<JAVA_HOME>/lib/extVerzeichnis.

1.3 Anwendungsklassenlader:

Er wird auch als Systemklassenlader bezeichnet und ist für das Laden von Klassen unter dem Anwendungsklassenpfad verantwortlich. Es ist eine Unterklasse der ClassLoader-Klasse und wird normalerweise durch den Instanziierungsprozess der Java Virtual Machine instanziiert.

1.4 Benutzerdefinierter Klassenlader:

Entwickler können den Klassenlader anpassen, indem sie die ClassLoader-Klasse erben und ihre eigene Ladelogik implementieren. Solche Klassenlader werden benutzerdefinierte Klassenlader genannt.

2. Mechanismus zur elterlichen Delegation:

Der übergeordnete Delegierungsmechanismus ist eine hierarchische Klassenladestruktur, die die Einzigartigkeit und Sicherheit von Klassen gewährleistet. Wenn ein Klassenlader eine Anforderung zum Laden einer Klasse empfängt, prüft er zunächst, ob die Klasse geladen wurde. Wenn sie geladen wurde, gibt er das Klassenobjekt der Klasse direkt zurück. Wenn es nicht geladen wurde, wird delegiert Die Anforderung an den übergeordneten Klassenlader wird geladen und nach oben delegiert, bis sie den Startklassenlader erreicht.

Der Arbeitsablauf ist wie folgt:

  1. Wenn ein Klassenlader eine Anfrage zum Laden einer Klasse erhält, prüft er zunächst, ob die Klasse bereits geladen wurde.
  2. Wenn es geladen wurde, wird das Class-Objekt direkt zurückgegeben.
  3. Wenn sie nicht geladen wird, wird die Ladeanforderung an den übergeordneten Klassenlader delegiert.
  4. Der übergeordnete Klassenlader führt die Überprüfung auf die gleiche Weise fort, bis er den Startklassenlader erreicht.
  5. Wenn der Startklassenlader die Klasse nicht laden kann, versucht der untergeordnete Klassenlader, die Klasse selbst zu laden.
  6. Wenn der Unterklassenlader erfolgreich geladen wird, wird das Class-Objekt zurückgegeben. Wenn dies fehlschlägt, wird ClassNotFoundException gemeldet.

Der Vorteil dieses Mechanismus besteht darin, dass er wiederholtes Laden vermeidet und die Einzigartigkeit der Klasse gewährleistet. Außerdem verbessert er die Sicherheit und verhindert das Laden schädlicher Klassen.

Beim Anpassen eines Klassenladers müssen Sie normalerweise die Methode findClass neu schreiben, um Ihre eigene Ladelogik zu implementieren, und Sie können wählen, ob der übergeordnete Delegierungsmechanismus zerstört werden soll.

meine anderen Blogs

Git-Befehlssammlung: von den Grundlagen bis zu fortgeschrittenen Anwendungen – CSDN-Blog

Stellen Sie kurz einige andere Bäume im CSDN-Blog vor

Was ist Kater? Wofür wird Tomcat verwendet? -CSDN-Blog

TCP/IP-Vierschichtarchitektur-CSDN-Blog

Redis neuer Datentyp-Bitmaps-CSDN-Blog

Tencent – ​​Unzureichender Speicher bei der Installation von MySQL8.0 in Pagoda in Centos7, einem leichtgewichtigen Anwendungsserver – CSDN-BlogSynchronisierte Optimierung – CSDN-BlogTencent -Light Unzureichender Speicher bei der Installation von MySQL 8.0 in der Pagode des Massenanwendungsservers centos7 – CSDN-Blog

[Computernetzwerk] URL-Konzept und Komposition-CSDN-Blog

[Computernetzwerk] TCP-Socket-Programmierung-CSDN-Blog

Letzte Änderung des Aufzählungsklassen-CSDN-Blogs

Was ist RabbitMQ-CSDN-Blog?

おすすめ

転載: blog.csdn.net/AliceNo/article/details/135026649