Heim  >  Artikel  >  Java  >  Werden String-Literale jemals im Müll gesammelt? Erkundung der Nuancen der String-Internierung und Klassenentladung.

Werden String-Literale jemals im Müll gesammelt? Erkundung der Nuancen der String-Internierung und Klassenentladung.

DDD
DDDOriginal
2024-10-31 05:13:30341Durchsuche

 Do String Literals Ever Get Garbage Collected? Exploring Nuances of String Interning and Class Unloading.

Garbage Collection von String-Literalen

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:

  1. Wird eine Zeichenfolge, die als Literal zur Kompilierungszeit („Java“) definiert ist, jemals durch Garbage Collection erfasst?
  2. Wie funktioniert die Intern-Methode? Einfluss auf das Garbage-Collection-Verhalten haben?
  3. Stimmt es, dass Literale nur dann Garbage-Collection sind, wenn die String-Klasse entladen wird?

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!

Stellungnahme:
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