Frage:
String-Literale gelten im Allgemeinen als intern und sind daher nicht anfällig für Müllabfuhr. Allerdings kommt es zu Verwirrung, wenn man die Nuancen der String-Verkettung, des String-Klassen-Cachings und des Klassen-Entladens untersucht. Zur Verdeutlichung gehen wir auf die folgenden Fragen ein:
Antwort:
1. Garbage Collection von Literalen zur Kompilierungszeit:
String-Literale, die zur Kompilierungszeit definiert werden, bleiben so lange bestehen wie der Klassenlader, der den Code geladen hat, der diese Literale enthält. Solange die Klassen, die die Literale verwenden, geladen bleiben, werden die sie darstellenden String-Objekte nicht durch Garbage Collection erfasst. Wenn jedoch der Klassenlader zerstört wird, können die Literale der Garbage Collection unterliegen.
2. Intern-Methode und Garbage Collection:
Der Aufruf der Intern-Methode für einen String gibt dasselbe Objekt zurück, das das String-Literal darstellt. Daher hat die internierte Zeichenfolge dieselbe Lebensdauer wie das Literal selbst. Mit „new“ erstellte Zeichenfolgen, die nicht mit Zeichenfolgenliteralen identisch sind, können jedoch durch Garbage Collection erfasst werden, wenn sie nicht mehr erreichbar sind.
3. Entladen von Klassen und String-Literale:
Es ist falsch zu behaupten, dass Literale nur beim Entladen der String-Klasse durch Müll gesammelt werden. Java entlädt seine Kernklassen, einschließlich der String-Klasse, nicht. String-Literale bleiben erhalten, solange der Code, der sie referenziert, aktiv bleibt.
Das obige ist der detaillierte Inhalt vonWerden String-Literale jemals im Müll gesammelt? Erkundung der Nuancen der String-Internierung und Klassenentladung.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!