Prefacio
El área de memoria Java se compone principalmente de contadores de programas, pilas de máquinas virtuales Java, pilas de métodos locales, montones Java, áreas de método y piscinas constantes de tiempo de ejecución. Este artículo le presentará en detalle sobre la división y las excepciones de las áreas de memoria de Java. No diré mucho a continuación, echemos un vistazo a la introducción detallada juntos.
Área de datos de tiempo de ejecución
Cuando el JVM ejecuta programas Java, divide la memoria en varias áreas de datos diferentes.
Mostrador de programas
Hilo privado. Se puede considerar como un indicador de número de línea del bytecode ejecutado por el hilo actual. El trabajo del intérprete Bytecode es leer la siguiente instrucción ByTecode que se ejecutará cambiando este valor de conteo.
La lectura múltiple se logra cambiando los hilos a su vez y asignando el tiempo de ejecución del procesador. En cualquier momento, un núcleo solo puede ejecutar instrucciones en un hilo. Para restaurar la posición de ejecución correcta después de la conmutación de subprocesos, cada subproceso necesita un contador de programa independiente. Esto es lo que mencioné al comienzo de "Thread Private". Si el método que está ejecutando el hilo es un método Java, el contador registra la dirección de instrucción del bytecode de la máquina virtual; Si es un método nativo, el valor del contador está vacío. El mostrador del programa es el único área donde no se especifica la situación OOM (OutOfMemoryError) en la especificación de la máquina virtual Java.
Pila de máquinas virtuales de Java
Los hilos son privados, con el mismo ciclo de vida que los hilos. La pila de máquinas virtuales Java describe el modelo de memoria de los métodos Java: cada método creará un marco de pila cuando se ejecute, almacene tablas variables locales, pilas de operandos, enlaces dinámicos e información de salida del método. Desde la llamada al final, cada método corresponde al proceso de entrada y salida de la pila de este marco de pila en la pila de máquina virtual. La tabla de variables locales guarda varios tipos de datos básicos (int, double, char, byte, etc.), referencia de objeto (no el objeto en sí) y el tipo de retorno (apuntando a una dirección de código de bytecode).
Dos posibles excepciones en esta área:
Pila de métodos locales
La pila de máquina virtual anterior ejecuta servicios de método Java para el JVM, y el método local ejecuta el servicio nativo. Otros son similares a la pila de máquinas virtuales, y también se lanzarán StackOverflowerror y OutOfMemoryError.
Montón de java
El comúnmente denominado "memoria de pila" y "memoria de montón", la primera se refiere a la pila de máquinas virtuales, y el segundo se refiere al montón de Java. El montón Java es compartido por hilos. Creado cuando se inicia la máquina virtual.
El papel del montón de Java es almacenar instancias de objetos. El montón Java puede estar en un espacio de memoria físicamente discontinuo, y solo requiere lógicamente continuo.
Área de método
El área compartida por los hilos. Almacena datos como información de clase, constantes, variables estáticas, código compilado por el compilador, etc. que han sido cargados por la máquina virtual. Cuando el área del método no puede cumplir con los requisitos de asignación de memoria, se arroja un OutOfMemoryError.
Piscina constante de tiempo de ejecución
La piscina constante de tiempo de ejecución es parte del área del método. C se utiliza para almacenar varias constantes literal y referencias simbólicas generadas durante el período de compilación, y se almacenará en el grupo constante de tiempo de ejecución que ingresa al área del método después de la carga de clase. El lenguaje Java no requiere que se generen constantes solo durante el período de compilación. En otras palabras, se pueden colocar nuevas constantes durante el período de ejecución.
Memoria directa
La memoria directa no es parte del área de datos de tiempo de ejecución de la máquina virtual, ni es un área de memoria. La asignación de memoria directa de la máquina nativa no estará limitada por el tamaño del montón de Java, pero después de todo es memoria. Si la suma de cada área de memoria es mayor que el límite de memoria física, aún aparecerá un OutOfMemoryError.
Proceso de creación de objetos
La máquina virtual encuentra una "nueva" instrucción:
Diseño de la memoria de objetos
El diseño de objetos almacenados en la memoria se puede dividir en 3 áreas:
Encabezado del objeto: almacena los datos de tiempo de ejecución del objeto, como el código hash, la edad de generación de GC, el indicador de estado de bloqueo, el bloqueo de los subprocesos, la identificación de hilo sesgada, etc. Otra parte es un puntero de tipo, es decir, un puntero a los metadatos de clase del objeto. La máquina virtual usa este puntero para determinar a qué instancia de clase pertenece el objeto.
Datos de instancia: la información verdaderamente válida del objeto, el contenido de varios tipos de campo definidos en el programa;
Suplemento de alineación: no esencial, el papel de los ocupantes.
Posicionamiento de acceso a objetos
Los programas Java operan objetos de instancia en el montón a través de referencias en la pila. Por ejemplo
Persona p = nueva persona ();
Aquí P es una referencia, y el objeto de persona producido por nuevo es una instancia.
Esta referencia no especifica cómo localizar y acceder a la ubicación específica de los objetos en el montón. Hay dos métodos de acceso convencional:
manejar. Se dividirá un pedazo de memoria en el montón de Java como un grupo de identificadores, que hace referencia a la dirección del mango del objeto, y el mango contiene los datos de instancia de objeto y los datos de tipo. La ventaja es que cuando se mueve el objeto, solo necesita cambiar la dirección en el mango, y la referencia en sí no necesita ser modificada.
Puntero directo. La dirección del objeto se almacena directamente en la referencia. La ventaja es que la velocidad es más rápida, y debido a que la referencia representa directamente la dirección del objeto de instancia, se guarda una operación de posicionamiento del puntero. Así es exactamente como usa Sun Hotspot.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.