Partición y modelo de memoria JVM

Durante la ejecución del programa, la máquina virtual Java divide la memoria de la jvm en varias áreas de datos diferentes para su gestión, estas áreas tienen sus propios propósitos, así como tiempos de creación y destrucción.
El área de memoria administrada por jvm incluye las siguientes áreas:
Escriba la descripción de la imagen aquí

Área de pila:
la pila se divide en pila de máquina virtual java y pila de método local

  • El foco está en la pila de la máquina virtual de Java, que es privada para el subproceso y tiene el mismo ciclo de vida que el subproceso.
  • La ejecución de cada método creará un marco de pila para almacenar la tabla de variables locales, la pila de operaciones, el enlace dinámico, la salida del método, etc. Se llama a cada método hasta que se ejecuta. Corresponde al proceso de un marco de pila desde que se inserta hasta que se extrae en la máquina virtual.
  • En términos generales, la pila se refiere a la parte de la tabla de variables locales , que almacena los 8 tipos de datos básicos conocidos durante la compilación, así como las referencias de objetos y direcciones de instrucciones. La tabla de variables locales se asigna durante la compilación Al ingresar un método, se determina el tamaño de memoria asignado para las variables locales en la pila.
  • Habrá dos excepciones StackOverFlowError y OutOfMemoneyError. Cuando la profundidad de la pila de solicitudes de subprocesos es mayor que la profundidad permitida por la máquina virtual, se generará un error StackOverFlowError; la pila de la máquina virtual se expande dinámicamente, y cuando la expansión no puede solicitar suficiente espacio de memoria, se genera un OutOfMemoneyError.
  • La pila de métodos locales es utilizada por la máquina virtual para servir el método local (nativo)

Área de montón:

  • El montón es un área compartida por todos los subprocesos y se crea cuando se inicia la máquina virtual con el único propósito de almacenar instancias de objetos .
  • El área del montón es el área principal de GC, y generalmente se divide en dos bloques, la generación joven y la generación anterior. De una manera más detallada, la generación joven se divide en el área de Eden, donde los objetos recién creados deben colocarse con mayor frecuencia. De sobreviviente y Para sobreviviente, guarde los objetos que sobrevivieron a GC. De forma predeterminada, la proporción es 8: 1: 1 respectivamente.
    Sin embargo, muchos artículos se dividen en tres bloques y el área del método se considera la generación permanente. Esto probablemente se basa en la división de máquinas virtuales Hotspot y luego, por ejemplo, IBM j9 no tiene una introducción a la generación permanente. No importa cuán particionado, es para almacenar instancias de objetos.
  • Habrá una excepción OutOfMemoneyError

Área de método:

  • El área compartida por todos los subprocesos se utiliza para almacenar datos como información de clase, constantes y variables estáticas que ha cargado la máquina virtual . Descrito por la máquina virtual de Java como una parte lógica del montón. Es costumbre llamarlo también la generación permanente (generación permanente)
  • La recolección de basura rara vez visita esta área, pero también necesita ser reciclada, principalmente para el reciclaje constante de la piscina y la descarga de tipos.
  • El grupo de constantes se usa para almacenar varios códigos de bytes y referencias de símbolos generados durante la compilación . El grupo de constantes tiene cierta dinámica y puede almacenar constantes generadas durante la compilación; las constantes durante el tiempo de ejecución también se pueden agregar al grupo de constantes, como el método intern() de cadena.

Contador de programas :

  • Un indicador del número de línea que está ejecutando el subproceso actual. La siguiente instrucción se determina cambiando el valor del contador, como bucles, bifurcaciones, saltos, manejo de excepciones, recuperación de subprocesos, etc., todos dependen del contador para completarse.
  • El subproceso múltiple de la máquina virtual Java se realiza cambiando los subprocesos a su vez y asignando el tiempo de ejecución del procesador. Para que el interruptor de subproceso se recupere a la posición correcta, cada subproceso necesita un contador de programa independiente , por lo que es un subproceso privado.
  • El único bloque de la máquina virtual Java que no especifica ningún OutofMemoryError

La partición jvm es aproximadamente este bloque, y contiene muchos detalles, y el algoritmo de cada módulo es muy complicado. Aquí hay solo una breve introducción a la partición para dominar algunos puntos básicos de conocimiento.

Supongo que te gusta

Origin blog.csdn.net/m0_67265464/article/details/126743758
Recomendado
Clasificación