


Interviewer: Erzählen Sie mir etwas über den Klassenladeprozess (10 Diagramme)
Laden
Wenn wir eine Klasse verwenden möchten, müssen wir die Klasse über ClassLoader in den Speicher laden
„Die Klassenladephase erledigt hauptsächlich die folgenden drei Dinge“
-
Erhalten Sie den Binärstrom der Klasse über den vollständigen Klassennamen. Parsen Sie den Binärstrom der Klasse in die Datenstruktur im Methodenbereich. Erstellen Sie eine Instanz der Klasse java.lang.Class zur Darstellung der Typ, als Methodenbereich Klassenzugriffseingang

„Es gibt viele Möglichkeiten, den Binärstrom einer Klasse über den vollständigen Klassennamen zu erhalten“
Holen Sie es sich aus dem Zip-Paket Holen Sie es sich aus dem Netzwerk Laufzeitberechnungsgenerierung, z. B. dynamische Proxy-Technologie ...
"Für die Ladephase von Nicht-Array-Typen können Sie die integrierte Funktion verwenden Klassenlader der Java Virtual Machine zum Vervollständigen, oder Sie können den vom Benutzer angepassten Klassenlader zum Vervollständigen verwenden"
Link
"Diese Phase der Verknüpfung ist hauptsächlich in drei Teile unterteilt: Überprüfung, Vorbereitung und Analyse"
Verifizierung
" Die Verifizierungsphase ist Hauptsächlich, um sicherzustellen, dass das Dateiformat der Klasse korrekt ist und die Sicherheit der virtuellen Maschine beim Ausführen nicht gefährdet „Ich werde die spezifischen Details nicht im Detail erklären, Sie können sehen“ „Detailliertes Verständnis der Java Virtual Machine“, dieser Artikel zieht es vor, eine Zusammenfassung zu erstellen und den gesamten Prozess des Ladens von Klassen zu erfassen, ohne auf die Details einzugehen für die statischen Variablen der Klasse und initialisieren Sie sie mit Standardwerten"
Die Standardwerte gängiger Datentypen sind wie folgt
Datentyp
Standardwert
byte
(byte)0
short
(short)0
int 0
lang
0L
float
0.0f
double
0.0d
boolean
false
char
'u0000'
Referenz
null
"Wenn das ConstantValue-Attribut in der Feldattributtabelle der statischen Klassenvariablen vorhanden ist, wird die Zuweisungsanweisung direkt ausgeführt"
Unter welchen Umständen ist das ConstantValue-Attribut in der Feldattributtabelle der statischen Klassenvariablen vorhanden? ?
Statische Klassenvariablen sind grundlegende Datentypen und werden durch final geändert. Statische Klassenvariablen sind vom Typ String, werden durch final geändert und ihnen werden Werte in Form von Literalen zugewiesen. Der Reihe nach Um die Anzeige der Bytes des Klassendateicodes zu erleichtern, habe ich in IDEA einen Plug-in-Jclasslib-Bytecode-Viewer heruntergeladen, der sehr praktisch ist. Verwenden Sie den folgenden Code, um ihn in Form eines Bytecodes zu überprüfen Alters- und Ortsattribute werden zugewiesen? ? Es befindet sich in der Initialisierungsphase, die später im Detail vorgestellt wird.
Klassen, Schnittstellen, Felder und Methoden in direkte Referenzen umwandeln 》Symbolische Referenz: Verwenden Sie eine Reihe von Symbolen, um das referenzierte Ziel zu beschreiben
Direkter Verweis; direkter Zeiger auf das ZielKommen Sie mit und schreiben Sie eine Klasse wie folgt
public class Person { private static int age = 10; private static final int length = 160; private static final String name = "name"; private static final String loc = new String("loc"); }
Am Beispiel von Feldern verweisen die dem Namen und dem Alter entsprechenden Objekte nicht direkt auf die Speicheradresse, sondern werden mit Zeichenfolgen beschrieben ( d.h. symbolische Referenz). Die Parsing-Phase besteht darin, diese Beschreibungen in Zeiger umzuwandeln, die direkt auf das Ziel verweisen (d. h. direkte Referenzen)
初始化
「执行类静态成员变量赋值语句和静态代码块中的语句」

我们把上面的Student代码改成如下形式
public class Student { private String name; private int age = 10; private static int gender = 1; { System.out.println("构造代码块"); } static { System.out.println("静态代码块"); } public Student() { System.out.println("构造函数"); } public String getName() { return this.name; } }
可以看到字节码中包含了3个方法,getName方法我们知道,从字节码的角度分析一波
「

从字节码可以看到
调用父类的 方法 非静态成员变量赋值 执行构造代码块 执行构造函数
「
从字节码可以看到
Führen Sie die Zuweisungsanweisung der statischen Variablen aus. Führen Sie die Anweisung im statischen Codeblock aus ausgeführt wird, wird die Methode der übergeordneten Klasse ausgeführt. Es ist immer noch notwendig, die Rolle der Methoden über statische Codeblöcke, konstruierte Codeblöcke und konstruierte Die Ausführungsreihenfolge von Funktionen „ - Ich werde die Schlussfolgerung hier direkt zusammenfassen. Sie können eine Demo schreiben, um sie zu überprüfen
„Ausführungsreihenfolge ohne Vererbung“
Statische Codeblöcke und statische Mitgliedsvariablen, die Ausführungsreihenfolge wird durch die Schreibreihenfolge bestimmt (sie wird nur einmal ausgeführt)
Erstellen Sie Codeblöcke und nicht statische Mitgliedsvariablen, die Ausführungsreihenfolge wird durch die Schreibreihenfolge bestimmtKonstruktor
- „Ausführungsreihenfolge mit Vererbung“
- Statisch (statischer Codeblock, statische Mitgliedsvariablen) der übergeordneten Klasse, statisch (statischer Codeblock, statische Mitgliedsvariablen) der Unterklasse ( wird nur einmal ausgeführt)
der nicht statische (konstruierter Codeblock, nicht -statische Mitgliedsvariablen) der Unterklasse, der Konstruktor der Unterklasse
Unloading -
Die Garbage Collection erfolgt nicht nur im Heap, sondern auch im Methodenbereich. Die Bedingungen für das Recycling von Typdaten im Methodenbereich sind jedoch recht streng. Die folgende Abbildung ist ein Beispiel dafür, dass ich die Simple-Klasse im Methodenbereich recyceln möchte
Sie müssen sicherstellen, dass die Sample-Klasse und ihre Unterklassen im Heap recycelt wurden Der MyClassLoader, der die Sample-Klasse lädt, wurde recycelt Das der Sample-Klasse entsprechende Klassenobjekt wurde recycelt
Sie können sehen, dass die Bedingungen für das Recycling von Typdaten im Methodenbereich relativ hart sind, die Ergebnisse jedoch minimal sind, sodass einige Garbage Collectors die Typdaten im Methodenbereich nicht recyceln
Zusammenfassung
Klassenladeprozess
Variablenzuweisungsprozess
Das obige ist der detaillierte Inhalt vonInterviewer: Erzählen Sie mir etwas über den Klassenladeprozess (10 Diagramme). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Sie müssen Spring kennen, also lassen Sie uns über die Reihenfolge aller Benachrichtigungen von Aop sprechen. Wie wirkt sich Spring Boot oder Spring Boot 2 auf die Ausführungsreihenfolge von Aop aus? Erzählen Sie uns von den Fallstricken, auf die Sie bei AOP gestoßen sind?

OOM bedeutet, dass im Programm eine Sicherheitslücke vorliegt, die durch den Code oder die JVM-Parameterkonfiguration verursacht werden kann. In diesem Artikel erfahren die Leser, wie sie Fehler beheben können, wenn ein Java-Prozess OOM auslöst.

Das Extrakapitel der Java-Concurrent-Programming-Reihe, C A S (Compare and swap), ist nach wie vor in einem leicht verständlichen Stil mit Bildern und Texten gehalten und ermöglicht den Lesern eine verrückte Konversation mit dem Interviewer.

Unterschätzen Sie nicht die schriftlichen Prüfungsfragen vieler Unternehmen. Es gibt Fallstricke, in die Sie versehentlich geraten können. Wenn Sie auf eine solche schriftliche Testfrage zu Zyklen stoßen, empfehle ich Ihnen, ruhig zu denken und Schritt für Schritt vorzugehen.

Letzte Woche ging ein Freund aus der Gruppe zu einem Interview mit Ping An Insurance. Das Ergebnis war etwas bedauerlich, aber ich hoffe, Sie lassen sich nicht entmutigen, im Grunde genommen alle Fragen, auf die Sie stoßen Das Interview kann durch Auswendiglernen der Interviewfragen gelöst werden, also arbeiten Sie bitte hart!

In diesem Artikel werden fünf Interviewfragen zur Java-String-Klasse behandelt. Ich habe während des Interviewprozesses mehrere dieser fünf Fragen persönlich erlebt. Dieser Artikel wird Ihnen helfen zu verstehen, warum die Antworten auf diese Fragen so sind.

Dieser Artikel hat insgesamt mehr als 30.000 Wörter und umfasst Linux-Übersicht, Festplatte, Verzeichnis, Datei, Sicherheit, Syntaxebene, praktische Kämpfe, Dateiverwaltungsbefehle, Dokumentbearbeitungsbefehle, Festplattenverwaltungsbefehle, Netzwerkkommunikationsbefehle, Systemverwaltungsbefehle und Backup Komprimierungsbefehle usw. Abbau von Linux-Wissenspunkten.

Meituan, sehen Sie, ob Sie darauf antworten können?
