Quindi, mi rendo conto che le domande che sto per porre riguardano un argomento che è stato battuto fino alla morte più e più volte, tuttavia, anche dopo aver letto tutte le risposte e la documentazione che ho trovato, sono ancora un po ' confuso sull'internamento delle stringhe. Forse è dovuto alla mia mancanza di comprensione per la JVM; forse è dovuto alle modifiche introdotte in Java 7 che svalutano molte delle risposte e della documentazione sopra menzionate. Ad ogni modo, mi sono bloccato, e spero che qualcuno possa aiutarmi a capire il concetto un po 'più chiaramente ...Come funziona lo interning delle stringhe in Java 7+?
String a = "text";
String b = new String("text");
Nell'esempio di cui sopra, capisco che verranno creati due oggetti String. Capisco anche che ci sarà un solo array char contenente la sequenza 't', 'e', 'x' e 't' in memoria. Tuttavia, dove sono in memoria ciascuno degli oggetti stringa effettivamente memorizzati? Se quello che ho letto ho letto correttamente: il riferimento della variabile a
verrà memorizzato nel pool costante mentre il referente di b
verrà memorizzato nell'heap, giusto? In tal caso, sono confuso su come il pool interno mantiene stringhe internate. Tiene traccia delle stringhe definite nel pool costante e quelle che sono state internalizzate manualmente (invocato .intern()
) dall'heap? JVM crea gli oggetti stringa definiti nel pool costante e li carica nel pool interno? Sono confuso su come tutto funziona ...
Ancora, scusa per aver posto domande così confuse/asinine, è solo che sono relativamente nuovo alla struttura e ai meccanismi interni dello JVM
e un sacco di mi ha lasciato girare la testa. Grazie!
ti suggerisco leggi tutte le risposte [qui] (http://stackoverflow.com/questions/27123131/underlying-mechanism-of-string-pooling-in-java) –
Nulla di fondamentale è cambiato per quanto riguarda lo interning delle stringhe in Java 7 e 8 rispetto alle versioni precedenti. – Jesper