suchen
HeimJavaJavaBaseLadevorgang der Java-Klasse

Ladevorgang der Java-Klasse

Jun 03, 2020 pm 05:58 PM
java

Ladevorgang der Java-Klasse

Java-Klassenladevorgang

Der erste ist der Ladevorgang (Loading), bei dem Java Bytecode-Daten aus verschiedenen Datenquellen liest. Holen Sie es sich in die JVM übertragen und einer von der JVM erkannten Datenstruktur (Klassenobjekt) zuordnen, z. B. in JAR-Dateien, Klassendateien oder sogar in Netzwerkdatenquellen, wenn die Eingabedaten nicht ClassFile sind Struktur, ClassFormatError wird geworfen. Die Ladephase ist die Phase, in der Benutzer teilnehmen. Wir können den Klassenlader anpassen, um unseren eigenen Klassenladeprozess zu implementieren.

Die zweite Stufe ist die Verknüpfung, der Kernschritt, der darin besteht, die ursprünglichen Klassendefinitionsinformationen reibungslos in den laufenden JVM-Prozess zu übertragen. Dies kann weiter in drei Schritte unterteilt werden: 1. Überprüfung, die eine wichtige Garantie für die Sicherheit der virtuellen Maschine darstellt. Die JVM muss überprüfen, ob die Byte-Informationen der Java Virtual Machine-Spezifikation entsprechen, andernfalls wird sie als VerifyError betrachtet Verhindern Wenn schädliche oder nicht konforme Informationen den Betrieb der JVM beeinträchtigen, kann die Überprüfungsphase das Laden weiterer Klassen auslösen. 2. Vorbereitung (Pereparation): Erstellen Sie statische Variablen in der Klasse oder Schnittstelle und initialisieren Sie die Anfangswerte der statischen Variablen. Es gibt jedoch einen Unterschied zwischen der „Initialisierung“ hier und der Anzeigeinitialisierungsphase unten. Der Schwerpunkt liegt auf der Zuweisung des erforderlichen Speicherplatzes und es werden keine weiteren JVM-Anweisungen ausgeführt. 3. Lösung In diesem Schritt wird die symbolische Referenz im Konstantenpool durch eine direkte Referenz ersetzt. In der Java Virtual Machine Specification wird die Analyse verschiedener Aspekte wie Klassen, Schnittstellen, Methoden und Felder ausführlich vorgestellt.

Der letzte Schritt ist die Initialisierungsphase. In diesem Schritt wird tatsächlich die Codelogik der Klasseninitialisierung ausgeführt, einschließlich der Aktion der statischen Feldzuweisung und der Ausführung der Logik im statischen Initialisierungsblock Der Compiler führt die Kompilierungsphase durch. Dieser Teil der Logik wird aussortiert, und die Initialisierungslogik des übergeordneten Typs hat Vorrang vor der Logik des aktuellen Typs. Lassen Sie uns über das übergeordnete Delegationsmodell sprechen. Wenn der Loader (Class-Loader) versucht, einen bestimmten Typ zu laden, versuchen Sie, die Aufgabe an den übergeordneten Typ des aktuellen Loaders zu delegieren, es sei denn, der übergeordnete Klassenlader kann den entsprechenden Typ nicht finden. Werkzeuge, um es zu tun. Der Zweck der Verwendung des Delegationsmodells besteht darin, das wiederholte Laden von Java-Typen zu vermeiden.

Häufige Szenarien benutzerdefinierter Klassenlader

Um eine ähnliche In-Process-Isolation zu erreichen, wird der Klassenlader tatsächlich als anderer Namespace sowie zur Bereitstellung ähnlicher Container verwendet und Modultransformationseffekt. Beispiel: 1. Zwei Module hängen von unterschiedlichen Versionen einer bestimmten Klassenbibliothek ab. Wenn sie von unterschiedlichen Containern geladen werden, stören sie sich nicht. Meister in diesem Bereich sind Java EE und OSGL, JPMS und andere Frameworks. 2. Die Anwendung muss Klassendefinitionsinformationen aus verschiedenen Datenquellen abrufen, z. B. aus Netzwerkdatenquellen und nicht aus dem lokalen Dateisystem. 3. Oder Sie müssen den Bytecode selbst bearbeiten und den generierten Typ dynamisch ändern.

Wir können den Ladevorgang für benutzerdefinierte Klassen im Allgemeinen einfach verstehen: 1. Finden Sie die binäre Implementierung, indem Sie den Namen angeben. Dies ist häufig der Teil, den der benutzerdefinierte Klassenlader beispielsweise in bestimmten Daten „anpasst“. Quelle Bytecode nach Namen abrufen oder Bytecode ändern oder generieren. 2. Erstellen Sie dann das Klassenobjekt und schließen Sie den Ladevorgang der Klasse ab. Die Konvertierung binärer Informationen in Klassenobjekte basiert normalerweise auf defineClass. Wir müssen sie nicht selbst implementieren. Mit dem Class-Objekt wird der nachfolgende Ladevorgang reibungslos abgeschlossen.

Empfohlenes Tutorial: „Java-Tutorial

Das obige ist der detaillierte Inhalt vonLadevorgang der Java-Klasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
Was sind verschiedene Algorithmen für die Müllsammlung in Java (seriell, parallel, CMS, G1, ZGC)?Was sind verschiedene Algorithmen für die Müllsammlung in Java (seriell, parallel, CMS, G1, ZGC)?Mar 14, 2025 pm 05:06 PM

In dem Artikel werden verschiedene Algorithmen für Java -Müllsammlungen (seriell, parallel, CMS, G1, ZGC), deren Leistungsauswirkungen und Eignung für Anwendungen mit großen Haufen erörtert.

Was ist die Java Virtual Machine (JVM) und wie funktioniert sie intern?Was ist die Java Virtual Machine (JVM) und wie funktioniert sie intern?Mar 14, 2025 pm 05:05 PM

In dem Artikel werden die Java Virtual Machine (JVM) erörtert, in der die Rolle bei der Ausführung von Java -Programmen auf verschiedenen Plattformen aufgeführt ist. Es erläutert die internen Prozesse, Schlüsselkomponenten, das Speichermanagement, die Müllsammlung und das Leistungsoptimizatio des JVM

Wie benutze ich Javas Nashorn -Engine zum Scripting mit JavaScript?Wie benutze ich Javas Nashorn -Engine zum Scripting mit JavaScript?Mar 14, 2025 pm 05:00 PM

Javas Nashorn Engine ermöglicht JavaScript Scripting in Java -Apps. Zu den wichtigsten Schritten gehören das Einrichten von Nashorn, das Verwalten von Skripten und die Optimierung der Leistung. Hauptfragen beinhalten Sicherheit, Speicherverwaltung und zukünftige Kompatibilität aufgrund von Nashorns Deprecus

Wie benutze ich Javas Versuchserklärung für das automatische Ressourcenmanagement?Wie benutze ich Javas Versuchserklärung für das automatische Ressourcenmanagement?Mar 14, 2025 pm 04:59 PM

Javas Try-with-Ressources vereinfacht das Ressourcenmanagement, indem Ressourcen wie Dateiströme oder Datenbankverbindungen automatisch geschlossen werden und die Code-Lesbarkeit und -wartbarkeit verbessert werden.

Wie benutze ich Javas Enums, um feste Wertesätze darzustellen?Wie benutze ich Javas Enums, um feste Wertesätze darzustellen?Mar 14, 2025 pm 04:57 PM

Java Enum repräsentieren feste Wertesätze und bieten durch benutzerdefinierte Methoden und Konstruktoren Typensicherheit, Lesbarkeit und zusätzliche Funktionalität. Sie verbessern die Codeorganisation und können in Switch -Anweisungen zur effizienten Wertschreibung verwendet werden.

See all articles

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)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung