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!

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.

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

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

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.

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.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

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
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
Nützliche JavaScript-Entwicklungstools

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung