Heim Java javaLernprogramm Detaillierte Erläuterung des Klassenladers basierend auf der Java-Klassenlademethode

Detaillierte Erläuterung des Klassenladers basierend auf der Java-Klassenlademethode

Oct 20, 2017 am 09:29 AM
classloader java 方式

Der folgende Editor bietet Ihnen eine detaillierte Erläuterung der klassenbasierten Lademethode classloader_java. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor, um einen Blick darauf zu werfen

Grundkonzepte

Classloader-Klassenlader, der zum Laden von Java-Klassen in die Java Virtual Machine verwendet wird . Es unterscheidet sich von gewöhnlichen Programmen. Java-Programme (Klassendateien) sind keine lokal ausführbaren Programme. Wenn Sie ein Java-Programm ausführen, führen Sie zuerst die JVM (Java Virtual Machine) aus und laden Sie dann die Java-Klasse zur Ausführung in die JVM. Der für das Laden der Java-Klasse verantwortliche Teil heißt Class Loader.

Die JVM selbst enthält einen ClassLoader namens Bootstrap ClassLoader. Wie die JVM ist der Bootstrap ClassLoader im lokalen Code implementiert und für das Laden der Kern-JavaClass (d. h. aller Klassen, die mit java.* beginnen) verantwortlich. Darüber hinaus stellt die JVM auch zwei ClassLoader bereit, die beide in der Java-Sprache geschrieben sind und vom Bootstrap ClassLoader geladen werden. Der Extension ClassLoader ist für das Laden erweiterter Java-Klassen verantwortlich (z. B. alle Klassen, die mit javax.* beginnen) und Klassen im ext-Verzeichnis der JRE gespeichert). ApplicationClassLoader ist für das Laden der eigenen Klassen der Anwendung verantwortlich.

Beim Ausführen eines Programms startet die JVM den Bootstrap-Klassenlader und führt ihn aus. Der ClassLoader lädt die Java-Kern-API (ExtClassLoader und AppClassLoader werden zu diesem Zeitpunkt ebenfalls geladen) und ruft dann ExtClassLoader auf, um die Erweiterungs-API zu laden AppClassLoader lädt das CLASSPATH-Verzeichnis. Die definierte Klasse ist der grundlegendste Ladevorgang eines Programms.

Hinweis: Lernen Sie ClassLoader kennen und sehen Sie sich OSGI-Programmanwendungen an.

Wann verwendet die JVM ClassLoader, um eine Klasse zu laden? Wenn Sie Java zum Ausführen einer Klasse verwenden, verwendet die JVM ApplicationClassLoader, um die Klasse zu laden. Wenn dann Klasse A auf Klasse B verweist, unabhängig davon, ob es sich um eine direkte Referenz oder eine Referenz mit Class.forName () handelt, findet die JVM den ClassLoader, der Klasse A lädt, und verwendet diesen ClassLoader, um Klasse B zu laden. Die JVM bestimmt, ob sie neue Klassen gemäß den effektiven Ausführungsanweisungen zur Laufzeit laden muss, um so wenige Klassen wie möglich zu laden. Dies unterscheidet sich von kompilierten Klassen.

Warum Ihren eigenen ClassLoader verwenden?

Es scheint, dass der JVM-eigene ClassLoader ausreicht. Warum müssen wir unseren eigenen ClassLoader erstellen?

Da der mit der JVM gelieferte ClassLoader nur Standard-Java-Klassendateien aus dem lokalen Dateisystem laden kann, können Sie, wenn Sie Ihren eigenen ClassLoader schreiben, Folgendes tun:

1) Vor der Ausführung nicht vertrauenswürdig Code, digitale Signaturen automatisch überprüfen

2) Erstellen Sie dynamisch benutzerdefinierte Konstruktionsklassen, die den spezifischen Anforderungen der Benutzer entsprechen

3) Erhalten Sie Java-Klassen von bestimmten Orten, z. B. Datenbanken

4) Warten

Tatsächlich wird bei der Verwendung von Applet ein bestimmter ClassLoader verwendet, da zu diesem Zeitpunkt die Java-Klasse aus dem Netzwerk geladen und relevante Sicherheitsinformationen überprüft werden müssen.

Die meisten Anwendungsserver nutzen die ClassLoader-Technologie. Auch wenn Sie keinen eigenen ClassLoader erstellen müssen, hilft Ihnen das Verständnis seiner Prinzipien dabei, Ihre eigenen Anwendungen besser bereitzustellen.

Wichtiger Hinweis: Tatsächlich kann eine geladene Klasse nicht aktualisiert werden, wenn Sie versuchen, denselben ClassLoader erneut zu laden wird eine Ausnahme erhalten (java.lang.LinkageError: doppelte Klassendefinition), und wir können nur eine neue ClassLoader-Instanz neu erstellen, um die neue Klasse erneut zu laden. Was die ursprünglich geladene Klasse betrifft, muss sich der Entwickler nicht darum kümmern, da möglicherweise noch Instanzen verwendet werden. Solange die relevanten Instanzen vom Speicher recycelt werden, entlädt die JVM die Klassen, die nicht mehr verwendet werden der passende Zeitpunkt.

Die meisten Java-Programme verwenden drei Arten von Klassenladern, die vom System bereitgestellt werden

1. Starten Sie den Klassenlader (Bootstrap ClassLoader). ), verantwortlich für das Laden der Klassenbibliothek, die im Verzeichnis lib oder im durch den Parameter -Xbootclasspath angegebenen Pfad vorhanden ist und von der virtuellen Maschine erkannt wird. Beachten Sie, dass sie durch den Dateinamen identifiziert wird. Wie beispielsweise rt .jar werden Klassenbibliotheken mit inkonsistenten Namen nicht geladen, selbst wenn sie im lib-Verzeichnis abgelegt werden.

2. Erweiterungsklassenlader (ExtClassLoader), der für alle Klassenbibliotheken im libext-Verzeichnis oder im durch die Systemvariable java.ext.dirs angegebenen Pfad verantwortlich ist.

3. Der über cassLoader.getSystemClassLoader() abgerufene Anwendungsklassenlader (App-ClassLoader) ist für das Laden der im Benutzerklassenpfad (ClassPath) angegebenen Klassenbibliothek verantwortlich Programmgerät.

Das übergeordnete Delegationsmodell ist eine von Java-Designern für Entwickler empfohlene Methode zum Laden von Klassen. Der Arbeitsprozess des übergeordneten Delegationsmodells ist: Wenn ein Klassenlader eine Klassenladeanforderung erhält, versucht er nicht zuerst, die Klasse selbst zu laden , delegiert diese Anforderung jedoch zur Vervollständigung an den übergeordneten Klassenlader. Dies gilt für jede Ebene des Klassenladers, sodass alle Ladeanforderungen nur dann an den übergeordneten Klassenlader übertragen werden, wenn dies nicht der Fall ist Wenn die erforderliche Klasse gefunden wird, versucht der Subloader, sie selbst zu laden. Der Vorteil des übergeordneten Modus besteht darin, dass Java-Klassen eine priorisierte hierarchische Beziehung zu ihren Klassenladern haben. Beispielsweise wird die Klasse Object in rt.jar gespeichert, unabhängig davon, welcher Klassenlader diese Klasse lädt, sie wird schließlich an die Startklasse oben im Modell delegiert. Daher kann das Laden der Object-Klasse weiterhin gewährleistet werden in einer Umgebung, in der das Programm mehrere Klassenlader derselben Klasse verwendet. Im Gegenteil, wenn das übergeordnete Modell nicht verwendet wird, kann der Benutzer selbst eine Objektklasse schreiben, was zu mehreren verschiedenen Objektklassen im System führt. Auf diese Weise kann das grundlegendste Verhalten im Java-Typsystem nicht garantiert werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Klassenladers basierend auf der Java-Klassenlademethode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Feb 07, 2025 pm 12:11 PM

Spring Boot vereinfacht die Schaffung robuster, skalierbarer und produktionsbereiteter Java-Anwendungen, wodurch die Java-Entwicklung revolutioniert wird. Der Ansatz "Übereinkommen über Konfiguration", der dem Feder -Ökosystem inhärent ist, minimiert das manuelle Setup, Allo

See all articles