Vorwort
Ich habe einen Artikel über die Abteilung des JVM -Speicherbereichs geschrieben, aber gestern habe ich ein Interview mit Ant Financial erhalten. Ich fragte nach JVM -verwandten Inhalten und erklärte die Aufteilung des JVM -Speicherbereichs. Dieser Teil war ziemlich gut, aber später fragte ich, wo die String in Java gespeichert ist. Ich erinnerte mich nur, dass String eine unveränderte Menge ist, die im konstanten Pool gespeichert werden sollte. Aber später fragte ich, wo eine neue Saite platziert werden soll, die in den Haufen platziert werden soll. Später fragte ich, wo die String -Referenzen platziert wurden. Zu dieser Zeit war ich dumm und sagte, dass sie auch in den Haufen gelegt wurden. Jetzt werde ich zusammenfassen: Grundlegende Variablendaten und Objektreferenzen werden in den Stapel platziert, das Objekt selbst wird in den Haufen platziert, explizite Stringkonstanten werden in den konstanten Pool platziert, und String -Objekte werden in den Haufen platziert.
Beschreibung des konstanten Pools
Der konstante Pool wurde zuvor in den Methodenbereich platziert, dh in der dauerhaften Generation und bewegte sich ab JDK7 auf den Haufen. Diese Änderung ist aus den in JDK 7 -Notizen in der Release -Version von Oracle angesprochenen ** wichtigen RFEs zu erkennen.
Bereich: HotspotSynopsis: In JDK 7 werden interne Zeichenfolgen nicht mehr in der dauerhaften Generation des Java -Haufens zugewiesen, sondern im Hauptteil des Java -Haufens (bekannt als junge und alte Generationen) zusammen mit den anderen von der Anwendung erstellten Objekten. Diese Änderung führt zu mehr Daten, die sich im Haupt -Java -Haufen befinden, und weniger Daten in der dauerhaften Erzeugung und erfordern daher möglicherweise die Anpassung von Haufen. Die meisten Anwendungen werden aufgrund dieser Änderung nur relativ geringe Unterschiede in der Haufensverwendung feststellen
String Speicherort Speicherort Beschreibung
1. Explizite Stringkonstanten
Zeichenfolge a = "seilten"; String b = "Holten";
• Nach dem ersten Satz wird ein String -Objekt mit dem Wert Holten im konstanten Pool erstellt.
• Wenn der zweite Satz ausgeführt wird, da sich im konstanten Pool ein Holten befindet, wird kein neues String -Objekt mehr erstellt.
• Zu diesem Zeitpunkt befindet sich der Verweis auf die Zeichenfolge im virtuellen Maschinenstapel.
1. STRING -Objekt
String a = new String ("Holtenobj"); String b = new String ("Holtenobj");• Wenn die Klasse geladen wird, wird ein String -Objekt mit dem Wert von Holtenobj im konstanten Pool erstellt. Wenn der erste Satz ausgeführt wird, wird im Haufen ein neuer String -Objekt ("Holtenobj") erstellt.
• Wenn der zweite Satz ausgeführt wird, da Holtenobj im konstanten Pool existiert, wird kein neues String -Objekt mehr erstellt und ein neues Zeichenfolge ("Holtenobj") direkt im Haufen erstellt.
Verifizieren
/*** Erstellt von seilten.gao am 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ückgabeergebnis:
TrueFalse
Der obige Artikel basiert auf der detaillierten Erklärung der String -Speicherorte in Java. Es ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.