Maison  >  Article  >  Java  >  Les littéraux de chaîne sont-ils déjà collectés ? Explorer les nuances du stage en chaîne et du déchargement de classe.

Les littéraux de chaîne sont-ils déjà collectés ? Explorer les nuances du stage en chaîne et du déchargement de classe.

DDD
DDDoriginal
2024-10-31 05:13:30341parcourir

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

Garbage Collection of String Literals

Question :

Les littéraux de chaîne sont généralement considérés comme internés et donc non susceptibles d'être collecte des ordures. Cependant, une confusion surgit lors de l'exploration des nuances de la concaténation de chaînes, de la mise en cache des classes String et du déchargement des classes. Pour clarifier, examinons les questions suivantes :

  1. Une chaîne définie comme un littéral au moment de la compilation ("java") sera-t-elle un jour récupérée ?
  2. Comment la méthode interne influencer le comportement du garbage collection ?
  3. Est-il vrai que les littéraux ne sont récupérés que lorsque la classe String est déchargée ?

Réponse :

1. Garbage Collection des littéraux au moment de la compilation :

Les littéraux de chaîne, définis au moment de la compilation, durent aussi longtemps que le chargeur de classe qui a chargé le code contenant ces littéraux. Tant que les classes utilisant les littéraux restent chargées, les objets String qui les représentent ne seront pas récupérés. Cependant, si le chargeur de classe est détruit, les littéraux peuvent être soumis au garbage collection.

2. Méthode intern et Garbage Collection :

L'appel de la méthode intern sur une chaîne renvoie le même objet représentant la chaîne littérale. En tant que telle, la chaîne interne a la même durée de vie que le littéral lui-même. Cependant, les chaînes créées à l'aide de new qui ne sont pas identiques aux chaînes littérales peuvent être récupérées si elles deviennent inaccessibles.

3. Déchargement de classe et littéraux de chaîne :

Il est incorrect de prétendre que les littéraux ne sont récupérés que lorsque la classe String est déchargée. Java ne décharge pas ses classes principales, y compris la classe String. Les littéraux de chaîne sont conservés tant que le code qui les référence reste actif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn