Explique el uso del área de pila, montón y método en la memoria.

Por lo general, definimos una variable de un tipo de datos básico, una referencia a un objeto y el almacenamiento en el sitio de las llamadas a funciones utilizan el espacio de pila en la JVM; mientras que los objetos creados por la nueva palabra clave y el constructor se colocan en el espacio de pila, el montón es El área principal administrada por el recolector de basura. Dado que los recolectores de basura actuales adoptan algoritmos de recolección generacional, el espacio de almacenamiento también se puede subdividir en generaciones jóvenes y viejas. Más específicamente, se puede dividir en Eden y Survivor (que se puede dividir en From Survivor y To Survivor), Tenured; el área de método y el montón son áreas de memoria compartidas por cada hilo, que se utilizan para almacenar datos como información de clase, constantes, variables estáticas y código compilado por el compilador JIT que ha cargado la JVM; Los literales como 100, "hola" y las constantes escritas directamente se colocan en el grupo de constantes, que es parte del área de método. El espacio de la pila es el más rápido de operar, pero la pila es pequeña. Por lo general, se coloca una gran cantidad de objetos en el espacio del montón. El tamaño de la pila y el montón se pueden ajustar mediante los parámetros de inicio de la JVM. Si el espacio de la pila se agota, se activará un StackOverflowError. Un espacio insuficiente en el grupo constante provocará OutOfMemoryError.

String str = new String("hello");

En la declaración anterior, la variable str se coloca en la pila, el objeto de cadena creado con new se coloca en el montón y el literal "hola" se coloca en el área de métodos.

Suplemento 1: En la versión más reciente de Java (a partir de una determinada actualización de Java 6), debido al desarrollo del compilador JIT y la madurez gradual de la tecnología de "análisis de escape", las técnicas de optimización como la asignación de pila y la sustitución escalar hacen que el objeto deba asignarse en Este asunto se ha vuelto menos absoluto.
Suplemento 2 : El grupo de constantes en tiempo de ejecución es equivalente al grupo de constantes de archivos de clase, que es dinámico. El lenguaje Java no requiere que se generen constantes solo durante la compilación. También se pueden colocar nuevas constantes en el grupo durante el tiempo de ejecución. El método intern () de la clase String Eso es.

Observe el resultado de la ejecución del siguiente código y compare si los resultados anteriores y futuros de Java 7 son coherentes.

String s1 = new StringBuilder("go")
    .append("od").toString();
System.out.println(s1.intern() == s1);
String s2 = new StringBuilder("ja")
    .append("va").toString();
System.out.println(s2.intern() == s2);

Entrenamiento Java

Supongo que te gusta

Origin blog.csdn.net/msjhw_com/article/details/109237099
Recomendado
Clasificación