Préface
J'ai écrit un article sur la division de la zone de mémoire de JVM, mais hier, j'ai reçu une interview avec Ant Financial. J'ai posé des questions sur le contenu lié à JVM et expliqué la division de la zone de mémoire JVM. Cette partie était plutôt bonne, mais plus tard, j'ai demandé où String était stocké en Java. Je me souvenais seulement que la chaîne est une quantité inchangée, qui devrait être stockée dans la piscine constante. Mais plus tard, j'ai demandé où une nouvelle chaîne devait être placée, qui doit être placée dans le tas. Plus tard, j'ai demandé où des références de cordes avaient été placées. À cette époque, j'étais stupide et j'ai dit qu'ils étaient également placés dans le tas. Maintenant, je vais résumer: les données de variable de base de type et les références d'objet sont placées dans la pile, l'objet lui-même est placé dans le tas, les constantes de chaîne explicites sont placées dans le pool constant et les objets de chaîne sont placés dans le tas.
Description de la piscine constante
La piscine constante a été précédemment placée dans la zone de la méthode, c'est-à-dire qu'elle faisait partie de la génération permanente, et déménagé au tas à partir de JDK7. Ce changement peut être vu à partir des ** RFES importants abordés dans les notes JDK 7 dans la version de version d'Oracle.
Zone: HotspotSynopsis: Dans JDK 7, les chaînes internes ne sont plus allouées dans la génération permanente du tas de Java, mais sont plutôt attribuées dans la partie principale du tas Java (connu sous le nom de jeunes et anciennes générations), ainsi que les autres objets créés par l'application. Ce changement entraînera davantage de données résidant dans le tas Java principal, et moins de données dans la génération permanente, et peut donc nécessiter des tailles de tas pour être ajustées. La plupart des applications ne verront que des différences relativement faibles dans l'utilisation des tas en raison de ce changement, mais des applications plus grandes qui chargent de nombreuses classes ou utilisent lourds la méthode String.intern () verront des différences plus significatives.RFE: 6962931
Description de l'emplacement de la mémoire de la chaîne
1. Constantes de chaînes explicites
String a = "Holten"; String b = "Holten";
• Après la première phrase, un objet de chaîne avec la valeur Holten est créé dans le pool constant;
• Lorsque la deuxième phrase est exécutée, car il y a un holten dans le pool constant, un nouvel objet de chaîne n'est plus créé.
• À l'heure actuelle, la référence à la chaîne se trouve dans la pile de machine virtuelle.
1. objet de mise
String a = new String ("HoltenObj"); String b = new String ("HoltenoBj");• Lorsque la classe est chargée, un objet de chaîne avec la valeur de Holtenobj est créé dans le pool constant. Lorsque la première phrase est exécutée, un nouvel objet String ("HoltenObj") sera créé dans le tas;
• Lorsque la deuxième phrase est exécutée, car HoltenoBj existe dans le pool constant, un nouvel objet de chaîne n'est plus créé et un nouvel objet String ("HoltenObj") est directement créé dans le tas.
Vérifier
/ ** * Créé par Holten.gao le 2016/8/16. * / public class main {public static void main (string [] args) {String str1 = "gao xiaotian"; String str2 = "Gao xiaotian"; System.out.println (str1 == str2); // true String str3 = new String ("Gao Datian"); String str4 = new String ("Gao Datian"); System.out.println (str3 == str4); // false}}Résultat de retour:
Truefalse
L'article ci-dessus est basé sur l'explication détaillée des emplacements de mémoire de chaîne en Java. C'est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.