[Producción en masa] División del área de memoria JVM

División del área de memoria de Java Visual Machine

" Tiempo fragmentado, conocimiento local elaborado. "

Razones para aprender:

Aunque, en comparación con los lenguajes C y C ++, JAVA no requiere que los programadores asignen y liberen memoria manualmente para los objetos generados (nuevos). Este trabajo se puede entregar a la JVM para evitar que el programador se olvide El objeto moribundo libera memoria y provoca el riesgo de pérdida de memoria y desbordamiento de memoria. Sin embargo, limitado por la configuración de hardware y software y la lógica del código, JAVA administrará automáticamente la asignación y liberación de memoria por JVM, y también pueden ocurrir pérdidas y desbordamientos de memoria. Por lo tanto, debemos comprender cómo la JVM administra y libera memoria para hacer frente a las pérdidas y desbordamientos de memoria.
En esta ocasión, solo analice algunos de los conocimientos sobre la asignación automática de memoria JVM: la división del área de memoria JVM, la liberación de memoria (es decir, recolección de basura) y los detalles de la asignación de memoria se describirán más adelante.

Reserva de conocimiento:

Cada proceso del sistema operativo tiene un área de memoria administrada por sí mismo. De manera similar, JVM también pertenece a un proceso, y JVM también tiene un área de memoria (establecida como área de memoria D) que pertenece a su propia administración. Todos los programas java que se ejecutan en el proceso JVM utilizan esta área de memoria D. Podemos llamar D al área de datos de tiempo de ejecución D.

Inicio de largometraje:

La JVM divide el área de datos de tiempo de ejecución D en varias particiones como se muestra a continuación:

Inserte la descripción de la imagen aquí

Contador de programa

Similar al contador de programa del proceso del sistema operativo, pero el contador de programa aquí se refiere al contador de programa del subproceso en el programa java que se ejecuta en la JVM, que se utiliza para colocar el número de línea del subproceso que actualmente ejecuta la instrucción de código de bytes, y cada subproceso tiene un exclusivo El contador de programas. La parte del contador del hilo es la única área donde no existirá OutOfMemoryError.

Pila de máquinas virtuales Java

Aislamiento de subprocesos, cada vez que se llama a un método durante la ejecución de un subproceso de Java, se crea un marco de pila (marco de pila) en la pila de la máquina virtual Java. El marco de pila almacena tablas de variables locales, pilas de operandos, conexiones dinámicas y salidas de métodos. Y otra información. Después de llamar a un método, se abre el marco de pila del método. Por lo tanto, la llamada constante del método significa el empuje constante a la pila. La existencia de la pila de la máquina virtual Java ayuda al hilo que la posee a recordar qué procesos ha atravesado el método de llamada, asegurando así la corrección de la lógica.
Vale la pena señalar que cada máquina virtual tiene un límite de profundidad de pila para la pila de la máquina virtual, y las llamadas al método en el hilo exceden esta profundidad arrojarán una excepción StackOverFlowError; si la capacidad de la máquina virtual Java permite la expansión, cuando la profundidad de la pila no excede el límite Sin embargo, cuando la capacidad de la pila ha superado el límite y es necesario ampliar la capacidad, se lanzará una excepción OutOfMemory si no hay suficiente memoria disponible.

Pila de métodos nativos

La función de la pila del método nativo y la pila de la máquina virtual Java es similar. La diferencia es que el servicio del método nativo es la llamada al método nativo y el servicio de la pila de la máquina virtual Java es la llamada al método Java; el método nativo a menudo se denomina método local y se utilizan otros métodos. Método de implementación del lenguaje.

Montón de Java

Compartido entre subprocesos, el montón de Java es la pieza más grande de memoria de administración de máquinas virtuales. El único propósito de esta área de memoria es almacenar instancias de objetos. "Casi todas" las instancias de objetos en Java asignan memoria aquí. El montón de Java es un área de memoria administrada por el recolector de basura. Puede establecer el tamaño del área y si desea permitir la expansión, y hay una excepción OutOfMemory.

Área de métodos

Compartido entre subprocesos, utilizado para almacenar datos como información de tipo (aún información de clase) que ha sido cargada por la máquina virtual, constantes, variables estáticas y caché de código compilado por el compilador Just-In-Time. Esta parte a menudo se denomina "no montón" para distinguir la memoria del montón. Esta área también necesita recolección de basura (principalmente para recolección constante en piscinas y descarga de tipo), pero la frecuencia de reciclaje es mucho menor. Y también hay excepciones de OutOfMemory.

El concepto de memoria directa

La memoria directa no forma parte del área de datos cuando la máquina virtual está en ejecución. Sin embargo, esta parte también se utiliza con frecuencia y también puede causar anomalías de OutOfMemory. Esta parte de la memoria también ocupa una parte del área de memoria de la JVM No se pierda esta parte cuando configure los parámetros de la máquina virtual.

referencias:

"Comprensión profunda de la máquina virtual Java: características avanzadas y mejores prácticas de JVM (tercera edición)"
Ejecute el capítulo II, sección 2.2, área
de datos de: Zhou Zhiming
ISBN: 9787111641247

cola:

Los puntos de conocimiento anteriores están integrados en su propia comprensión. Si tiene alguna pregunta o deficiencia, no dude en discutir en la sección de comentarios o mensaje privado.

Supongo que te gusta

Origin blog.csdn.net/liangcheng0523/article/details/106300837
Recomendado
Clasificación