Notas de aprendizaje JVM: JVM Memory Management y JVM Bassed Recolects. La estructura de memoria JVM consiste en montón, pila, pila de métodos locales, área de método y otras partes. Además, JVM utiliza diferentes mecanismos de recolección de basura para las direcciones de descarga de la nueva generación y la antigua generación respectivamente.
Primero, echemos un vistazo a la estructura de memoria JVM, que se compone de montón, pila, pila de métodos locales, área de método y otras partes. El diagrama de la estructura se muestra a continuación.
Notas de aprendizaje JVM JVM Memoria Management y JVM Bassbage Recolection
Estructura de memoria JVM
La estructura de memoria JVM consiste en montón, pila, pila de métodos locales, área de método y otras partes. El diagrama de la estructura es el siguiente:
1) montón
La memoria de todos los objetos creados por nuevos se asigna en el montón, y su tamaño puede controlarse por -xmx y -xms. El montón se divide en el cepónimo y la antigua generación, y el cepónimo se divide en las zonas de Edén y sobrevivientes. Finalmente, Survivor está compuesto de FromSpace y Tospace. El diagrama de la estructura es el siguiente:
Una nueva generación. La nueva generación asigna la memoria asignada a los nuevos objetos. Cuando Eden es insuficiente, los objetos sobrevivientes se transferirán a Survivor. El tamaño de la nueva generación se puede controlar por -xmn, o -xx: Survivorratio puede usarse para controlar la relación de Edén y Survivor. Se usa para almacenar objetos que han sobrevivido a múltiples colecciones de basura en la nueva generación.
2) pila
Cuando cada subproceso ejecuta cada método, se aplicará un marco de pila en la pila. Cada marco de pila incluye un área variable local y una pila de operando, que se utiliza para almacenar variables temporales, parámetros y resultados intermedios durante esta llamada de método.
3) Pila de métodos locales
Utilizado para apoyar la ejecución de métodos nativos, almacenando el estado de cada llamada de método nativo
4) Área de método
Almacena la información de la clase que se cargará, variables estáticas y constantes de tipo final, atributos e información de métodos. JVM utiliza la generación permanente para almacenar áreas de método, y los valores mínimos y máximos se pueden especificar mediante -xx: Permsize y -xx: maxPermerMsize. Después de presentar la estructura de memoria JVM, echemos un vistazo a la dirección de descarga del mecanismo de recolección de basura JVM.
Mecanismo de recolección de basura JVM
JVM adopta diferentes mecanismos de recolección de basura para las generaciones nuevas y antiguas respectivamente
La nueva generación de GC:
El Cepónimo generalmente tiene un corto tiempo de supervivencia, por lo que se recicla en función del algoritmo de copia. El llamado algoritmo de copia es escanear los objetos sobrevivientes y copiarlos en un nuevo espacio completamente no utilizado, correspondiente al Cepónimo, que es copiar entre Eden y FromSpace o Tospace. La nueva generación utiliza un puntero inactivo para controlar la activación de GC. El puntero mantiene el último objeto asignado en el intervalo de nueva generación. Cuando hay un nuevo objeto para asignar la memoria, se usa para verificar si el espacio es suficiente. Si no es suficiente, activará GC. Cuando los objetos se asignan continuamente, los objetos irán gradualmente del Edén al Survivor, y finalmente a la antigua generación.
Use JavavisualVM para verlo claramente y observar que después de que la nueva generación esté llena, el objeto se transferirá a la generación anterior, y luego borrar y continuar cargando. Cuando la generación antigua está llena, se informará una excepción de Memory, como se muestra en la figura a continuación:
En términos de mecanismo de ejecución, JVM proporciona GC en serie (SerialGC), reciclaje paralelo GC (ParallelsCavenge) y GC paralelo (Parnew)
1) serial GC
Todo el proceso de escaneo y copia se lleva a cabo de una sola manera roscada. Es adecuado para aplicaciones con una sola CPU, espacio pequeño en la nueva generación y no muy altos requisitos para el tiempo de pausa. Es el método GC predeterminado a nivel de cliente. Se puede ver a especificarlo a través de -xx:+useerialgc
2) Reciclaje paralelo de GC
Todo el proceso de escaneo y replicación se realiza de manera múltiple. Es adecuado para múltiples CPU y aplicaciones con requisitos de tiempo de pausa cortos. Es el método GC utilizado por el nivel del servidor de forma predeterminada. Se puede usar para forzar la especificación de -xx:+useParallElgc, y use -xx: parallElgcthreads = 4 para especificar el número de subprocesos.
3) GC paralelo
Úselo con GC concurrente de la antigua generación
Old Generation GC:
A diferencia de la nueva generación, los objetos sobreviven durante mucho tiempo y son relativamente estables. Por lo tanto, el algoritmo Mark se usa para reciclar. La llamada marca significa escanear los objetos sobrevivientes y luego reciclar objetos sin marcar. Después del reciclaje, el espacio vacío se fusionará o se marcará para una fácil asignación la próxima vez. En resumen, es necesario reducir la pérdida de eficiencia causada por la fragmentación de la memoria. En términos de mecanismo de ejecución, JVM proporciona GC en serie (SerialMSC), GC paralelo (paralelo) y GC concurrente (CMS). Los detalles del algoritmo específico deben estudiarse más a fondo.
Los mecanismos GC anteriores deben usarse en combinación, y el método especificado se muestra en la siguiente tabla:
Lo anterior es todo el contenido de la comprensión profunda de los principios de trabajo de Java GC que el editor le trae. Espero que todos apoyen a Wulin.com más ~