jvm serie 1 - área de memoria jvm

(1) Conceptos básicos de jvm:

JVM es una computadora imaginaria que puede ejecutar código Java, incluido un conjunto de instrucciones de código de bytes, un conjunto de registros, una pila,

Un campo de método de recolección de basura, montón y almacenamiento. La JVM se ejecuta en el sistema operativo y no tiene conexión directa con el hardware.
interacción.
(2) Proceso de operación:
        Todos sabemos que los archivos fuente de Java, a través del compilador, pueden producir los archivos .Class correspondientes, que son archivos de código de bytes.
El archivo de código de bytes se compila en código de máquina en una máquina específica a través del intérprete en la máquina virtual Java.
Eso es lo siguiente:
① Archivo fuente de Java --> Compilador --> Archivo de código de bytes
② Archivo de código de bytes-->JVM-->Código de máquina
El intérprete de cada plataforma es diferente, pero la máquina virtual implementada es la misma, por eso Java puede
El motivo de la multiplataforma es que cuando un programa comienza a ejecutarse, la máquina virtual comienza a crear instancias. Cuando se inician varios programas,
Existen varias instancias de máquinas virtuales. Si el programa se cierra o se cierra, la instancia de la máquina virtual morirá y se perderán datos entre varias instancias de la máquina virtual.
Se puede compartir.
 
2.1.Hilos _
El hilo mencionado aquí se refiere a una entidad de hilo durante la ejecución del programa. La JVM permite que una aplicación ejecute varios subprocesos al mismo tiempo.
Los subprocesos de Java en Hotspot JVM tienen una relación de mapeo directo con los subprocesos nativos del sistema operativo . Cuando subprocesos de almacenamiento local, almacenamiento en búfer
Después de preparar la asignación del búfer, los objetos de sincronización, la pila, el contador de programas, etc., se crea un hilo nativo del sistema operativo .
El hilo de Java finaliza y el hilo nativo se recicla. El sistema operativo es responsable de programar todos los subprocesos y asignarlos a cualquier disponible.
en la CPU utilizada. Cuando se inicializa el hilo nativo, se llamará al método run() del hilo Java. Cuando el hilo termina,
Se liberarán todos los recursos de subprocesos nativos y subprocesos de Java.
Los subprocesos del sistema que se ejecutan en segundo plano en Hotspot JVM incluyen principalmente lo siguiente:
2.2.Área de memoria JVM
 
El área de memoria de JVM se divide principalmente en área privada de subprocesos [contador de programa, pila de máquina virtual, área de método local] y área compartida de subprocesos.
Dominio [montón JAVA, área de método], memoria directa.
El ciclo de vida del área de datos privados del hilo es el mismo que el del hilo, y se crea/destruye dependiendo del inicio/final del hilo del usuario (en Hotspot
Dentro de la VM , cada subproceso se asigna directamente al subproceso local del sistema operativo, por lo que el almacenamiento/ausencia de esta parte del área de memoria sigue al subproceso local.
correspondencia de vida/muerte).
El área compartida del subproceso se crea/destruye con el inicio/apagado de la máquina virtual .
La memoria directa no forma parte del área de datos del tiempo de ejecución de JVM, pero también se usa con frecuencia: NIO proporcionado por JDK 1.4
Proporciona un método IO basado en canal y búfer, puede usar la biblioteca de funciones nativas para asignar directamente memoria fuera del montón y luego usar
El objeto DirectByteBuffer opera como referencia a esta memoria (ver: extensión Java I/O), evitando así la necesidad de
Los datos se copian entre el montón y el montón nativo, por lo que el rendimiento se puede mejorar significativamente en algunos escenarios .

2.2.1 Contador de programa ( hilo privado )

        Un espacio de memoria más pequeño es el indicador del número de línea del código de bytes ejecutado por el hilo actual . Cada hilo debe tener un contador de programa independiente. Este tipo de memoria también se denomina memoria "privada de hilo". Si se está ejecutando el método Java, el contador registra la dirección de la instrucción de código de bytes de la máquina virtual (la dirección de la instrucción actual). Si todavía es un método nativo, estará vacío. Esta área de memoria es la única área de la máquina virtual que no tiene especificada ninguna condición OutOfMemoryError.

2.2.2 Pila de máquina virtual ( hilo privado )
Es un modelo de memoria que describe la ejecución de métodos Java. Cada método creará un marco de pila (Stack Frame) durante la ejecución.
Se utiliza para almacenar información como tablas de variables locales, pilas de operandos, enlaces dinámicos, salidas de métodos, etc. Cada método se llama hasta que se completa la ejecución.
El proceso corresponde al proceso desde insertar un marco de pila en la pila de la máquina virtual hasta sacarlo.
El marco de pila (Frame) es una estructura de datos que se utiliza para almacenar datos y resultados parciales del proceso, y también se utiliza para manejar enlaces dinámicos.
(Enlace dinámico), valor de retorno del método y envío de excepciones (Excepción de envío). Los marcos de pila se crean con llamadas a métodos.
Creado y destruido cuando finaliza el método , independientemente de si el método se completa de forma normal o anormal (se lanzó una excepción que no se detectó dentro del método)
(normalmente) se cuentan como el final del método.

2.2.3 Área de método local ( hilo privado )

El área de método local tiene una función similar a la pila de Java . La diferencia es que la pila de máquina virtual sirve para la ejecución de métodos Java, mientras que la pila de método local sirve para la ejecución de métodos Java.

Servicio de método nativo , si una implementación de VM utiliza el modelo de vinculación C para admitir llamadas nativas, entonces la pila será una
Pila C, pero HotSpot VM combina directamente la pila de métodos locales y la pila de máquinas virtuales en una sola.
 
2.2.4 Montón ( Heap- Thread Sharing) : área de datos en tiempo de ejecución
 
Es un área de memoria compartida por subprocesos. Los objetos y matrices creados se almacenan en la memoria del montón de Java y también son procesados ​​por el recolector de basura.
El área de memoria más importante para la recolección de basura . Dado que las máquinas virtuales modernas utilizan algoritmos de recopilación generacional , el montón de Java está bien desde la perspectiva de GC.
Se subdivide en: nueva generación ( área Eden , área From Survivor y área To Survivor ) y vieja generación.
 
2.2.5 Área de método / generación permanente (compartir subprocesos)
 
Eso es lo que a menudo llamamos generación permanente (Generación permanente) , que se utiliza para almacenar información de clases , constantes y archivos estáticos cargados por la JVM.
Datos como variables de estado , código compilado por un compilador justo a tiempo, etc. HotSpot VM extiende la colección generacional de GC al área de métodos, es decir, usando Java
La generación permanente del montón se utiliza para implementar el área del método , de modo que el recolector de basura de HotSpot pueda administrar esta parte de la memoria como el montón de Java.
En lugar de desarrollar un administrador de memoria especial para el área de métodos (el objetivo principal del reciclaje de memoria permanente es el reciclaje y el tipo de grupo constante
descarga , por lo que las ganancias son generalmente pequeñas).
El Runtime Constant Pool es parte del área de métodos. Además de la versión de la clase en el archivo de clase
Además de información como descripciones de archivos, campos, métodos, interfaces, etc., también existe un grupo constante (Constant Pool Table), que se utiliza para almacenar varios literales y referencias de símbolos generados durante la compilación. se almacenará después de cargar la clase en el grupo constante de tiempo de ejecución en el área de métodos. La máquina virtual Java tiene regulaciones estrictas sobre el formato de cada parte del archivo de clase (incluido naturalmente el grupo constante). El tipo de datos que se utiliza para almacenar cada byte debe cumplir con los requisitos de especificación, para que sean reconocidos por el máquina virtual Cargar y ejecutar.

Supongo que te gusta

Origin blog.csdn.net/weixin_38340874/article/details/122059066
Recomendado
Clasificación