Heim > Java > javaLernprogramm > Detaillierte Einführung in den Ladevorgang von Java-Klassen

Detaillierte Einführung in den Ladevorgang von Java-Klassen

不言
Freigeben: 2019-03-07 16:49:52
nach vorne
3228 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine detaillierte Einführung in den Java-Klassenladeprozess. Ich hoffe, dass er für Freunde hilfreich ist.

Der Prozess von Java-Dateien von der Codierung bis zur endgültigen Ausführung:

  1. Kompilieren: Javac Kompilieren Sie die Java-Datei in eine .class-Datei
  2. Ausführen: Senden Sie die .class file Führen Sie den

Klassenladevorgang für die JVM aus.

Die virtuelle JVM-Maschine lädt die Klasseninformationen in der .class-Datei in den Speicher und analysiert sie, um die entsprechende Datei zu generieren Klassenobjekt. Die JVM lädt nicht alle Klassen von Anfang an in den Speicher, sondern lädt sie nur, wenn sie zum ersten Mal und nur einmal auf eine Klasse trifft, die ausgeführt werden muss.

Detaillierte Einführung in den Ladevorgang von Java-Klassen

Laden

Klassenbytecodedateien aus verschiedenen Quellen über den Klassenlader in den Speicher laden
JVM Drei Dinge, die es zu erreichen gilt

  1. Rufen Sie den binären Bytestrom ab, der diese Klasse über den vollständig qualifizierten Namen einer Klasse definiert.
  2. Statische Speicherstruktur – > Laufzeitdatenstruktur im Methodenbereich
  3. Erzeugt das java.lang.Class-Objekt der entsprechenden Klasse im Java-Heap, das als Zugriffspunkt für den Zugriff dient diese Daten im Methodenbereich.

Klassenlader

  • Klassenlader starten
  • Klassenlader erweitern
  • Klassenlader-Ladeprogramm anwenden
  • Benutzerdefinierter Klassenlader

Verbindung

Der Prozess des Zusammenführens des Binärcodes der Java-Klasse in den Betriebszustand der JVM

Verifizierung

Stellen Sie sicher, dass der geladene Bytestream den Spezifikationen der virtuellen Maschine entspricht und keine Sicherheitsfehler verursacht

Überprüfungsklassifizierung

  • Überprüfung des Dateiformats, z. B. ob die Konstante Gibt es nicht unterstützte Konstanten? Enthält die Datei nicht standardmäßige oder zusätzliche Informationen
  • Metadatenüberprüfung, z. B. ob die Klasse eine durch final geänderte Klasse erbt? Stehen die Felder und Methoden in der Klasse im Konflikt mit der übergeordneten Klasse? Liegt eine unzumutbare Überlastung vor?
  • Die Bytecode-Überprüfung stellt die Rationalität der Programmsemantik sicher, beispielsweise die Rationalität der Typkonvertierung.
  • Überprüfung von Symbolreferenzen, z. B. Überprüfung, ob die entsprechende Klasse über den vollständig qualifizierten Namen in der Symbolreferenz gefunden werden kann? Überprüfen Sie, ob die Zugänglichkeit (privat, öffentlich usw.) in der Symbolreferenz für die aktuelle Klasse zugänglich ist.

Vorbereitung

Reservieren Sie Speicher für Klassenvariablen (Hinweis: keine Instanzvariablen) und weisen Sie Anfangswerte zu (die Standardanfangswerte der Java Virtual Machine entsprechend den verschiedenen Variablen). Typen)

Standardanfangswert

  • Der Anfangswert von 8 Grundtypen, der Standardwert ist 0
  • Der Anfangswert des Referenztyps ist null
  • Der Anfangswert der Konstante ist Für den im Code festgelegten Wert
  • final static tmp = 456

Parsing

Der Prozess des Ersetzens von Symbolreferenzen im Konstantenpool mit direkter Referenz

Symbolreferenz: eine Zeichenfolge, aber diese Zeichenfolge enthält einige relevante Informationen, die eine Methode, eine Variable oder eine Klasse eindeutig identifizieren können

Direktreferenz: kann verstanden werden als eine Speicheradresse oder eine Offset-Menge

Rufen Sie nun beispielsweise die Methode hello() auf, die Adresse dieser Methode lautet 1234567, dann ist hello eine symbolische Referenz, 1234567 ist eine direkte Referenz

Während der Analysephase wird die virtuelle Maschine die symbolischen Referenzen von Klassennamen, Methodennamen und Feldnamen durch spezifische Speicheradressen oder Offsets ersetzen, d. h. direkte Referenzen auf die

Initialisierung

zu Klassenvariablen (durch statische Variablen oder Anweisungen geändert) Initialisierung ist der Prozess der Ausführung des Klassenkonstruktors

Initialisierungsprozess

  • Beim Initialisieren einer Klasse wurde ihre übergeordnete Klasse nicht initialisiert dennoch wird die übergeordnete Klasse zuerst initialisiert
    - Enthält gleichzeitig mehrere statische Variablen und statische Codeblöcke und führt sie in der Reihenfolge von oben nach unten aus

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Ladevorgang von Java-Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage