Prefacio
Escribí un artículo sobre la división del área de memoria JVM, pero ayer recibí una entrevista con Ant Financial. Le pregunté sobre el contenido relacionado con JVM y expliqué la división del área de memoria JVM. Esta parte fue bastante buena, pero luego pregunté dónde se almacena la cadena en Java. Solo recordé que la cadena es una cantidad sin cambios, que debe almacenarse en la piscina constante. Pero más tarde pregunté dónde se debe colocar una nueva cadena, que debe colocarse en el montón. Más tarde, pregunté dónde se colocaron las referencias de cadenas. En ese momento, era una tontería y dije que también fueron colocados en el montón. Ahora resumiré: los datos de variables de tipo básico y las referencias de objeto se colocan en la pila, el objeto en sí se coloca en el montón, las constantes de cadena explícita se colocan en el grupo constante y los objetos de cadena se colocan en el montón.
Descripción de la piscina constante
La piscina constante se colocó previamente en el área del método, es decir, estaba en la generación permanente, y se movió al montón a partir de JDK7. Este cambio se puede ver a partir de los ** RFE importantes abordados en las notas JDK 7 en la versión de lanzamiento de Oracle.
Área: Hotspotsynopsis: en JDK 7, las cadenas internas ya no se asignan en la generación permanente del montón Java, sino que se asignan en la parte principal del montón de Java (conocido como las generaciones jóvenes y antiguas), junto con los otros objetos creados por la aplicación. Este cambio dará como resultado más datos que residen en el montón Java principal y menos datos en la generación permanente, y por lo tanto pueden requerir que se ajuste los tamaños de montón. La mayoría de las aplicaciones solo verán diferencias relativamente pequeñas en el uso del montón debido a este cambio, pero las aplicaciones más grandes que cargan muchas clases o hacen un uso pesado del método String.Intern () verán diferencias más significativas. RFE: 6962931
Descripción de la ubicación de la memoria de cadena
1. Constantes de cadena explícita
Cadena a = "holten"; string b = "holten";
• Después de la primera oración, un objeto de cadena con el valor Holten se crea en el grupo constante;
• Cuando se ejecuta la segunda oración, porque hay un Holten en el grupo constante, ya no se crea un nuevo objeto de cadena.
• En este momento, la referencia a la cadena está en la pila de máquinas virtuales.
1. Objeto de triunfo
String a = new String ("holtenobj"); String b = new String ("holtenobj");• Cuando se carga la clase, se crea un objeto de cadena con el valor de Holtenobj en el grupo constante. Cuando se ejecuta la primera oración, se creará un nuevo objeto String ("holtenobj") en el montón;
• Cuando se ejecuta la segunda oración, porque Holtenobj existe en el grupo constante, ya no se crea un nuevo objeto de cadena, y un nuevo objeto String ("holtenobj") se crea directamente en el montón.
Verificar
/*** Creado por holten.gao el 2016/8/16. */public class Main {public static void main (string [] args) {string str1 = "gao xiaotian"; Cadena str2 = "gao xiaotian"; System.out.println (str1 == str2); // true string str3 = new String ("Gao Datian"); Cadena str4 = new String ("Gao Datian"); System.out.println (str3 == str4); // falso}}Resultado de retorno:
verdadero
El artículo anterior se basa en la explicación detallada de las ubicaciones de memoria de cadena en Java. Es todo el contenido que comparto con ustedes. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.