Distribución de memoria Java virtual machine-1-JVM

Uno, distribución de memoria JVM

1. Modelo de memoria JVM

El modelo de memoria JVM incluye principalmente: cargador de clases, área de datos en tiempo de ejecución, biblioteca de métodos locales, interfaz de métodos locales, motor de ejecución y recolector de basura

El área de datos en tiempo de ejecución incluye principalmente: [subproceso exclusivo]: pila de máquina virtual, pila de método local, contador de programa, [intercambio de subprocesos]: montón, área de método

2. Cargador de clases

El cargador de clases se utiliza para cargar archivos de código de bytes (archivos .class) para preparar la ejecución del programa.

Si la clase requerida por el programa para realizar un determinado comportamiento no se ha cargado en la memoria, pasará por tres pasos para completar la inicialización de la clase.

  1. Cargar: carga el archivo de código de bytes en la memoria
  2. conexión
    1. Verificación: si el archivo de código de bytes tiene la estructura correcta
    2. Preparación: asigne alguna información de la clase al área de memoria
    3. Resolución: Reemplace la referencia simbólica en los datos binarios de la clase con una referencia directa
  3. Inicialización: crea una instancia del objeto

El cargador de clases de JVM se divide en

  1. BootstrapClassLoader (cargador de clases de inicio): carga la clase de tiempo de ejecución de JRE, ubicada en $ JAVA_HOME / jre / lib / rt.jar
  2. ExtClassLoader (cargador de clases extendido): carga las clases de extensión JRE, ubicadas en el directorio $ JAVA_HOME / jre / lib / ext
  3. AppClassLoader (cargador de clases de aplicaciones): carga la clase del programa Java
  4. Cargador de clases de usuario (Cargador personalizado)

Modelo de delegación parental: cuando el cargador de clases carga una clase, primero intente ser cargado por el cargador de clases padre, si el cargador de clases padre no puede completarlo, entonces el cargador de clases secundario lo completará

Mecanismo de seguridad de la zona de pruebas: debido a la existencia del modelo de delegación principal, no podemos crear una clase similar al propio JDK (el nombre completo de la clase es exactamente el mismo)

Destrucción del modelo de delegación principal: Apache Tomcat es un contenedor web que se utiliza para implementar aplicaciones web. Destruye el modelo de delegación principal. La carga de clases se transfiere directamente al cargador de clases de aplicaciones web (WebappClassLoader) para completar. Si la aplicación web la clase está cargada El dispositivo (WebappClassLoader) no se puede completar, y lo completa CommonClassLoader (CommonClassLoader). El objetivo principal de esto es garantizar que cada aplicación web sea independiente entre sí y no cause confusión debido a la dependencia de la misma clase (nombre de clase completo) y diferentes versiones.

El cargador de clases de Tomcat se divide en

  1. BootstrapClassLoader: cargue la clase de entorno JVM básica, ubicada en el directorio $ JAVA_HOME / lib
  2. SystemClassLoader: carga la clase de inicio Tomcat, ubicada en el directorio $ CATALINA_HOME / bin
  3. CommonClassLoader: carga las clases comunes de Tomcat, ubicadas en el directorio $ CATALINA_HOME / lib
  4. WebappClassLoader: Carga las clases de aplicaciones web, ubicadas en el directorio WEB-INF / lib y el directorio WEB-INF / classes. Solo accesible para la aplicación web actual

3. Pila de máquinas virtuales

Java Stack, utilizado principalmente para almacenar tipos de datos básicos y referencias de objetos de instancia, etc.

4. Pila de métodos locales

Native Method Stack, similar a Java Stack, está preparado para ejecutar métodos nativos

5. Contador de programas

Registro de contador de programa, utilizado para guardar la siguiente instrucción que se ejecutará

6, montón

Heap, utilizado principalmente para almacenar instancias de objetos, matrices y conjuntos de cadenas de constantes, etc.

El área principal de recolección de basura se divide en nueva generación y generación anterior. La proporción predeterminada es 1: 2, que se -XX:NewRatio=2puede ajustar modificando los parámetros de JVM

El Cenozoico se divide en Zona Edén, Zona Desde y Zona A. La proporción predeterminada es 8: 1: 1. Se -XX:SurvivorRatio=8puede ajustar modificando los parámetros de JVM

El GC que ocurre en la generación joven se llama GC menor, el GC que ocurre en la generación anterior se llama GC mayor, y el GC que ocurre en todo el montón se llama GC completo (incluida la recuperación de la generación permanente)

7. Área de métodos

Área de métodos, utilizada principalmente para almacenar información de clases (variables estáticas, métodos de construcción, declaraciones de métodos, etc.) y grupos de constantes de tiempo de ejecución (constantes, etc.)

La especificación de JVM describe el área de método como una parte lógica del montón, pero tiene un alias llamado Non-Heap (non-heap), el propósito es distinguirlo del montón

En la máquina virtual HotSpot, el área de método también se denomina generación permanente (Permanent Generation). Esto se debe a que HotSpot utiliza la generación permanente para implementar el área de método. En otras máquinas virtuales (BEA JRockit, IBM J9, etc.), No existe el concepto de generación permanente. Sin embargo, este enfoque de implementación probablemente haya experimentado (OOM) sin memoria, puede modificar los parámetros de JVM [JDK7] -XX:PermSize=???y -XX:MaxPermSize=???[JDK8] -XX:MetaspaceSize=???y -XX:MaxMetaspaceSize=???ajustar

Supongo que te gusta

Origin blog.csdn.net/adsl624153/article/details/103865446
Recomendado
Clasificación