JVM --- área de datos en tiempo de ejecución

Área de datos de tiempo de ejecución de JVM

Inserte la descripción de la imagen aquí
Como se muestra en la figura anterior, el área de datos en tiempo de ejecución de JVM se divide principalmente en:

 1. pc寄存器
 2. Java虚拟机栈
 3. Java堆
 4. 方法区
 5. 运行时常量池
 6. 本地方法栈

1.pc registro

En primer lugar, el registro de la PC en la JVM es esencialmente una pequeña pieza de memoria en la JVM . La máquina virtual Java puede admitir varios subprocesos para ejecutarse al mismo tiempo, y cada subproceso tendrá un registro de PC. Como el registro de PC habitual, el registro de PC de cada subproceso registrará la dirección de la instrucción ejecutada por el subproceso actual, pero en la máquina virtual de Java El registro de la PC es un poco diferente. Si el código ejecutado por el hilo es nativo (código escrito en un lenguaje que no sea Java), el valor del registro de pc no está definido ; si el código ejecutado no es nativo, el registro de pc contiene la dirección de la instrucción de código de bytes que se está ejecutando .

2. Pila de máquinas virtuales Java

Para varios subprocesos que se ejecutan en la máquina virtual Java, cada subproceso tiene su propia pila de máquina virtual Java (es decir, privada). Cuando se inicia el hilo, también se crea la pila de la máquina virtual Java. La pila de la máquina virtual Java se usa para almacenar marcos de la pila , similar al marco de la pila en el lenguaje C. El marco de la pila se usa para almacenar información sobre las variables y funciones locales, etc. La memoria utilizada por la pila de la máquina virtual Java puede ser discontinua .
La especificación de la máquina virtual Java no especifica el tamaño de la pila de la máquina virtual Java. En la implementación real de la máquina virtual Java, la pila de la máquina virtual puede tener un tamaño fijo o cambiar dinámicamente.

  • Si la capacidad asignada por la solicitud de subproceso excede la capacidad máxima permitida por la pila de la máquina virtual Java, la máquina virtual Java lanzará una excepción StackOverflowError;
  • Si la pila de la máquina virtual Java se puede expandir dinámicamente y no se solicita suficiente memoria cuando se intenta expandir, o no hay suficiente memoria al crear un nuevo subproceso, se lanzará un OutOfMemoryError.

3. Pila de métodos locales

El método nativo es un método escrito en un lenguaje que no es Java.Cuando el código ejecutado por el hilo en la máquina virtual Java proviene del método nativo, la pila de métodos nativos se usa en la máquina virtual Java para ejecutar el método nativo. Si se admite el método nativo cuando se implementa la máquina virtual Java, la pila de métodos nativos generalmente se asignará por subproceso cuando se cree el subproceso. De manera similar a la pila de máquinas virtuales Java, la pila de métodos nativos también puede generar excepciones similares StackOverflowError y OutOfMemoryError.

4 montón de Java

El montón de Java es un área de memoria en tiempo de ejecución compartida por todos los subprocesos que se ejecutan en la máquina virtual, y también es un área para todas las instancias de clase y objetos de matriz para asignar memoria.
Cuando se inicia la máquina virtual Java, también se acompaña de la creación del montón de Java, que almacena varios objetos administrados por el GC, y estos objetos no se pueden destruir explícitamente . La capacidad del montón de Java se puede fijar o expandir dinámicamente, y la memoria utilizada puede ser discontinua.
Si el montón utilizado excede la capacidad máxima que puede proporcionar el GC, la máquina virtual Java lanza una excepción OutOfMemoryError.

5. Área de métodos

El área de método también es un área de memoria en tiempo de ejecución compartida por todos los subprocesos que se ejecutan en la máquina virtual y se crea cuando se inicia la máquina virtual. El área de método se utiliza para almacenar la información estructural de cada clase, como el contenido del código de bytes del grupo de constantes de tiempo de ejecución, campos, datos de método, constructores y métodos comunes, así como algunos métodos especiales utilizados en la inicialización de clases, instancias, e interfaces.
La capacidad del área de método puede ser fija o expandida dinámicamente. Puede ser discontinua en el espacio de memoria real. Si la memoria del área de método no puede cumplir con la solicitud de asignación de memoria, se lanzará un OutOfMemoryError.

6. Grupo de constantes en tiempo de ejecución

Cada grupo de constantes de tiempo de ejecución se asigna en el área de métodos. Las constantes literales numéricas utilizadas por cada clase o interfaz en el archivo de clase, y las referencias de método y campo que se pueden obtener después del análisis de tiempo de ejecución se almacenan en sus respectivos grupos de constantes de tiempo de ejecución. Después de cargar la clase o interfaz en la máquina virtual, se crea la constante de tiempo de ejecución correspondiente.
Si el espacio de memoria requerido por el grupo de constantes de tiempo de ejecución excede el valor máximo proporcionado por el área de método al crear una clase o interfaz, se lanzará un OutOfMemoryError.

Supongo que te gusta

Origin blog.csdn.net/Miha_Singh/article/details/88688062
Recomendado
Clasificación