1. Beschreiben Sie das Prinzip des JVM-Ladens von Klassendateien Mechanismus?
(Weitere Empfehlungen zu Interviewfragen: Häufige Java-Interviewfragen )
Laden: Klassendateien suchen und importieren;
Überprüfen: Die Richtigkeit der geladenen Klassendateidaten;
Vorbereitung: Speicherplatz für statische Variablen der Klasse zuweisen;
Parsen: Symbolreferenzen in direkte Referenzen umwandeln (dieser Schritt ist optional)
Initialisierung: Statische Variablen und statische Codeblöcke initialisieren und die Ausführung starten, wenn das Programm statische Mitglieder der Klasse aufruft, also die statische Methode main() werden zur Eingabemethode eines allgemeinen Programms. Auch der Klassenkonstruktor löst diese Aktion aus.
2. Wird es in Java zu Speicherlecks kommen?
Speicherverlust bedeutet, dass ein Objekt oder eine Variable, die vom Programm nicht mehr verwendet wird, den Speicher belegt. Das Szenario eines Speicherverlusts in Java besteht für Laien darin, dass der Programmierer möglicherweise einen Speicherverlust erstellt Objekt, dieses Objekt wird in Zukunft nicht mehr verwendet, aber auf dieses Objekt wird immer verwiesen, das heißt, dieses Objekt ist nutzlos, kann aber nicht vom Garbage Collector recycelt werden. Dies ist ein Speicherverlust in Java.
(Empfohlene verwandte Tutorials: Java-Einführungs-Tutorial)
Wenn Die Methode eines Instanzobjekts einer äußeren Klasse gibt ein Instanzobjekt einer inneren Klasse zurück, auch wenn das Instanzobjekt der äußeren Klasse nicht mehr verwendet wird In der äußeren Klasse wird das Objekt der äußeren Klasse lange Zeit nicht durch Müll gesammelt, was ebenfalls zu Speicherverlusten führt.
3. Was ist GC? Warum GC?
GC bedeutet Garbage Collection, die dazu dient, Speicherlecks zu verhindern und den Speicher effektiv zu nutzen. Der Garbage Collector wird normalerweise als separater Thread mit niedriger Priorität ausgeführt und löscht und recycelt Objekte im Speicherheap, die unter unvorhersehbaren Umständen abgestorben sind oder längere Zeit nicht verwendet wurden Alle Objekte werden im Müll gesammelt.
4. JVM-Speichermodell (wichtig, GC-Algorithmus, neue Generation, alte Generation, permanente Generation usw. müssen im Detail verstanden werden)
Neue Generation: neu Erstellte Objekte werden mit der neuen Generation verwendet, um Speicher zuzuweisen. Wenn der Eden-Speicherplatz nicht ausreicht, werden die verbleibenden Objekte an Survivor übertragen. Die Größe der neuen Generation kann mit -Xmn gesteuert werden, oder mit -XX:SurvivorRatio kann das Verhältnis gesteuert werden von Eden zum Überlebenden
Alte Generation: Wird zum Speichern von Objekten der neuen Generation verwendet, die mehrere Garbage Collections überstanden haben
Persistenz: Implementiert den Methodenbereich, der hauptsächlich alle geladenen Klasseninformationen, Methodeninformationen und Konstanten speichert Schwimmbäder usw.
Sie können den Initialisierungswert und den Maximalwert des persistenten Bandes über -XX:PermSize und -XX:MaxPermSize angeben. Permanenter Speicherplatz ist nicht dasselbe wie der Methodenbereich. Hotspot JVM verwendet lediglich permanenten Speicherplatz, um den Methodenbereich zu implementieren. Einige virtuelle Maschinen verfügen nicht über permanenten Speicherplatz und verwenden andere Mechanismen, um den Methodenbereich zu implementieren.
Mark-Compact (Mark-Compact)
Dieser Algorithmus vereint die Vorteile der „Mark-Clear“- und „Copy“-Algorithmen. Es ist außerdem in zwei Phasen unterteilt. Die erste Phase markiert alle referenzierten Objekte ausgehend vom Wurzelknoten. Die zweite Phase durchläuft den gesamten Heap, löscht nicht markierte Objekte, „komprimiert“ die verbleibenden Objekte in einem der Heaps und entlädt sie der Reihe nach. Dieser Algorithmus vermeidet das Fragmentierungsproblem von „Mark-and-Sweep“ und vermeidet auch das Platzproblem des „Copy“-Algorithmus.
(Empfohlene verwandte Video-Tutorials: Java-Kurs)
5. Funktionsprinzip von GC
GC verwendet ein Referenzanzahlattribut für jedes Objekt. Wenn eine Referenz hinzugefügt wird, erhöht sich die Anzahl um 1, und wenn die Referenz freigegeben wird Die Anzahl verringert sich um 1 und die Anzahl beträgt 0. Sie kann recycelt werden, wenn das Objekt freigegeben wird. GC ist ein Hintergrund-Daemon-Prozess. Für Java-Programmierer verwenden Sie das Schlüsselwort new, um Objekte zuzuweisen Weisen Sie alle Verweise auf das Objekt auf null zu, damit das Programm nicht mehr darauf zugreifen kann. Wir nennen dieses Objekt „nicht erreichbar“. GC ist dafür verantwortlich, den Speicherplatz aller „nicht erreichbaren“ Objekte zurückzugewinnen.
Wenn der Programmierer bei GC ein Objekt erstellt, beginnt GC mit der Überwachung der Adresse, Größe und Verwendung des Objekts. Normalerweise verwendet GC einen gerichteten Graphen, um alle Objekte im Heap aufzuzeichnen und zu verwalten. Auf diese Weise wird bestimmt, welche Objekte „erreichbar“ und welche „nicht erreichbar“ sind. Wenn der GC feststellt, dass einige Objekte „nicht erreichbar“ sind, ist der GC für die Rückgewinnung dieser Speicherplätze verantwortlich.
Um jedoch sicherzustellen, dass GC auf verschiedenen Plattformen implementiert werden kann, regelt die Java-Spezifikation viele GC-Verhaltensweisen nicht streng. Beispielsweise gibt es keine klaren Vorschriften zu wichtigen Themen wie der Art des zu verwendenden Recyclingalgorithmus und dem Zeitpunkt des Recyclings. Daher verfügen verschiedene JVM-Implementierer häufig über unterschiedliche Implementierungsalgorithmen. Dies bringt auch große Unsicherheit in die Entwicklung von Java-Programmierern.
Das obige ist der detaillierte Inhalt vonJava-Interviewfragen, zusammengefasst aus langjähriger Entwicklungserfahrung – (5). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!