JVM área de datos en tiempo de ejecución de la excepción de desbordamiento de la memoria [A]

división de memoria máquina virtual de Java durante la ejecución del programa Java en el que se gestionará por un número de diferentes áreas de datos.


Bajo especificación de la máquina virtual, Java de gestión de memoria de la máquina virtual incluirá la siguiente área de datos de tiempo de ejecución (en base a 1,7):
Aquí Insertar imagen Descripción
cada región, como se detalla en la figura siguiente (en base a 1,8):
Aquí Insertar imagen Descripción

1. Contador de Programa

El contador de programa es un pequeño espacio en la memoria,La función principal es almacenar el número de línea de código de bytes de hilos de ejecución.

Debido multi-hilo Java Virtual Machine es a su vez conmutada y la asignación de tiempo de ejecución de procesador consigue mediante un hilo a la vez, un hilo en una ejecución de instrucciones de procesador solamente. Por lo tanto, con el fin de conmutar el hilo puede ser restaurado a la ubicación correcta de la ejecución, cada hilo requiere un contador de programa separado.

Esta área de memoria es la especificación de la máquina virtual de Java solamente no especifica cualquier situación OOM área.

2. pila VM

pila de subprocesos máquina virtual es privado, para cada hilo, hilo JVM se crea cuando se crea una parte de la pila del subproceso. pila VM se describemétodo de modelo de memoria de ejecución: Marcos de pila se utilizan para apoyar las estructuras y los métodos de datos de máquinas virtuales para realizar la llamada al método, y cada método serán ejecutadas en la pila hilo para crear un marco de pila para almacenar tabla de variables locales, la pila de operandos, método dinámico que une la exportación y otra información.Cada método lleva a cabo desde el principio hasta el final de la ejecución en un marco de pila corresponde a empujar la pila en una máquina virtual.

Correspondiente a una pila de subprocesos, el método marco de pila correspondiente

En el hilo caso, la parte superior del marco de pila pila llama el marco de pila actual, el método que se realiza se llama el método actual. En el motor de ejecución en tiempo de ejecución, todas las instrucciones operan sólo en el marco de pila actual. VM pila por empuje y el modo de pila, el método correspondiente a cada proceso aritmético marco de pila activa, el método se completa con éxito, saltará a otro marco de pila. Si se llama a este método, se saltará a llamar a este método el marco de pila, que es para la exportación, y si hay una excepción, una excepción estará de regreso, la dirección del remitente determinado por las tablas de manejo de excepciones.

tabla de variables locales almacenado para todos los tipos de datos básicos, referencia de objetoCaracterizado porque los datos de 64 bits de longitud doble de largo y ocupa dos espacio variable local, ocupa sólo una otros tipos.Espacio de memoria deseada tabla de variables locales para completar la tarea en tiempo de compilaciónCuando este método requiere espacio para las variables locales asignados en el marco entra tanto un método está bien definida, el método no cambia durante el funcionamiento del tamaño de las variables locales.

Operando pila es una estructura de pila, cuando el marco de pila se crea por la JVM para realizar un método, crea una pila de operandos en el marco de pila del método, garantiza el método que las instrucciones se pueden hacer.

Dynamic Link: Cada marco de pila contiene una referencia constante de la piscina para el método actual, el objetivo es apoyar el proceso de vinculación de llamadas a métodos dinámicos.

El método de la dirección de retorno: Hay dos salidas de realización de los métodos: una salida normal (instrucción de retorno de código de bytes encontrado, tales como el retorno, IRETURN, ARETURN); 2 abortado ... O bien dejar de fumar, debe volver a la posición que se llama método. El siguiente contador de programa 3 después de ejecutar la llamada; 1 devuelve el valor en el marco de pila Über; 2 la información del marco de pila de excepción que puede ser procesado tirado: proceso de salida método es equivalente a la estructura actual de la pila emergente, hay tres formas de salir ... instrucciones.

especificación de la máquina virtual, esto proporciona dos regiones de excepción de memoria: Si un subproceso solicitudes pila mayor profundidad que la profundidad permitida por la máquina virtual, a tiro excepción StackOverflowError; 2 no puede aplicarse a una máquina virtual si la pila de expansión dinámica. suficiente memoria, lanzará OOM.

3. Las pilas de métodos nativos

Ahora que Java ha sido muy maduro, métodos nativos usan menos que lo básico, por lo HotSpot simplemente implementar las pilas de métodos nativos y apilar máquinas virtuales combinados.

4. montón

montón esLa mayor parte de memoria gestionado por la máquina virtual de Java. Es todoCompartir hilos, Creado cuando la máquina virtual se inicia.Su único propósito es almacenar objetos, Por lo que casi todas las instancias de objetos en la asignación del montón de memoria (con el desarrollo de la madura tecnología compilador JIT y análisis de escape, la asignación en la pila, las técnicas de optimización de reemplazo escalares hará que el objeto no puede ser asignado en el montón), Java Virtual Machine Especificaciones Descripción: todas las instancias de objetos y las matrices que se asignarán en el montón.

recolector de basura del montón (Lectura recomendada recolector de basura de la JVM [tres] área principal) gestión: 1. Desde el punto de vista de la recuperación de la memoria de vista, el colector de corriente está básicamente utilizando el algoritmo de recolección generacional (Lecturas recomendadas algoritmos y estrategias de [dos] de recolección de basura de la JVM ), por lo que la pila también se puede subdividir en la nueva generación y la vieja era, a continuación, con más cuidado en Eden zona, de la región del superviviente, a la región del superviviente; 2 desde el punto de vista de la asignación de memoria, la pila puede ser dividido en una pluralidad de hilos asignado tampones privadas (la local la asignación de memoria intermedia hilo ,. TLAB ): Object preferentemente asignado en la nueva zona de generación de Eden, entorno multi-roscado para evitar el bloqueo de los mecanismos de influencia objeto velocidad de dispensación, la JVM puede asignar un área de caché privada para cada hilo ( TLAB ), este espacioAl asignar hilo es exclusiva cuando se utiliza un hilo comúnpor lo tantoMontón no es compartida por todos los temas. En esencia, la gestión TLAB se basa en tres puntos: inicio, fin, área superior, inicio y final están marcados de la gestión TLAB del Edén, no se utilizará esta área cuando otros hilos asignación de memoria, se le asigna el puntero superior, cuando el punto de inicio a la posición inicial, con la asignación de memoria, se acerca poco a poco al final, cuando el gatillo TLAB recarga igual a extremo. En cualquier caso, se almacenan los objetos montón.

estructura TLAB:
Aquí Insertar imagen Descripción
la estructura de la zona de Eden:
Aquí Insertar imagen Descripción
estructuras de memoria de pila:
Aquí Insertar imagen Descripción

Heap Walker memoria de la herramienta: (uso JConsole y VisualVm- que es esto, se puede instalar el plug-GC visual, la barra de navegación Herramientas -> Complementos en el interior)
Aquí Insertar imagen Descripción

conocimiento Ampliación: top uso del comando vista cpu, cargue el representante media de 1 minuto, 5 minutos, 15 minutos de carga del sistema promedio, estos tres números, con base en la carga del sistema es grande o pequeño. Cuando la CPU es completamente inactivo, la carga media es de 0; cuando la carga de trabajo de la CPU carga media 1 saturado.
Aquí Insertar imagen Descripción

Bajo la especificación Java Virtual Machine, almacenamiento dinámico de Java puede estar en el espacio de memoria física discontinua, siempre y cuando la continua lógicamente, como el espacio en disco. Cuando se implementa, máquina virtual HotSpot se implementa en extensible (por las -Xms espacio mínimo montón, el espacio de almacenamiento dinámico máximo -Xmx, el tamaño de los nuevos parámetros de control de generación -Xmn). Si no hay espacio para completar la instancia de objeto de asignación, y ya no puede ampliar el montón, se OOM.

La zona método

El área de método y el montón de Java es el mismo que todos los hilos comparten el área de memoria, que se utiliza para almacenarinformación de clase ha sido cargada en la máquina virtual, constantes, variables estáticas, el compilador tiempo para compilar el código y otros metadatos, Cada vez que una clase se carga por primera vez, que se colocará en el método de área de metadatos.

La zona método es el área de datos de tiempo de ejecución de las especificaciones de la máquina virtual define la gestión de las más liberales, Java especificación de máquina virtual no especifica cómo implementar el método de área, y no hay una posición clara sobre los requerimientos del área de método.En HopSpot (JDK1.8 antes), pero la zona método regiones lógicas separadas, y no existe físicamente independiente de la pila, sino que se encuentra la generación permanente. Por lo que este método de zona horaria también puede ser reciclado de basura.

HotSpot equipo de diseño de la máquina virtual, porque la colección generacional GC se extiende a la zona método, dicha gestión recolector de basura montón HotSpot puede ser como esto como parte de la gestión de memoria, por lo que muchas personas a la zona método llamado "perpetuos". Pero para lograr generación permanente área de método puede conducir fácilmente a desbordamiento de memoria. En JDK1.7, HotSpot originalmente en una zona de la piscina constante de cadena se mueve a la pila de método. JDK1.8 está sustituyendo permanentemente espacio de elementos (en memoria local) Alternativamente, los metadatos de clase de almacenamiento de información (método de campo), propiedades estáticas, constante.

Naturaleza y métodos de espacio-como región de yuanes, es la realización de área método de especificación JVM, pero el espacio entre el Yuan y la mayor diferencia es que el área de método: Yuan no es el espacio en una máquina virtual, pero el uso de la memoria local. Por lo tanto, de forma predeterminada, el tamaño del espacio de elementos sólo por el límite de la memoria local.

Esta parte de la misma y no requieren memoria de pila continua y se puede seleccionar un tamaño fijo o puede ser ampliado, puede optar por no aplicar la recolección de basura. recuperación de la memoria método de la zona objetivo es principalmente para el reciclado y descarga de piscina constante de la clase, pero las condiciones de descarga clase son duras, pero esta parte de la recuperación de la memoria región es necesaria.

JVM ajuste de parámetros correspondientes:
Aquí Insertar imagen Descripción
De acuerdo con la especificación Java Virtual Machine, cuando el método de área de asignación de memoria no puede satisfacer la demanda, sería OOM.

6. conjunto de constantes de tiempo de ejecución

Tiempo de ejecución de la piscina constante es parte del método de la zona. versiones del archivo de clase, además de las clases, campos, métodos, y la información de descripción de la interfaz, así como información de la agrupación constante. Clase cuatro primeros bytes de cada archivo se llama número mágico, su propósito es determinar si se trata de archivo de una máquina virtual puede ser aceptada; a continuación, cuatro bytes se almacenan en el número de versión del archivo de clase; próxima versión es el número de entrada del grupo de constantes. Por diversas piscina constante almacenar compilador literal generado (tales como cadenas de texto, valor constante final) y un símbolo de referencia (se convertirán a símbolos de referencia símbolo de estos campos en tiempo de ejecución para obtener la entrada de direcciones de memoria real), esta parte se almacenará en el método región de operación después de la piscina constante de tiempo de carga de clases.

Java Virtual Machine ninguna especificación constante piscina runtime cualquier detalle de los requisitos, pero el formato de archivo del grupo de constantes clase hay requisitos estrictos. En general, además de guardar un archivo Símbolo Descripción referencias de clase será traducido a cabo el paso por referencia directa también se almacena en la piscina constante.

Tiempo de ejecución de la piscina constante para otra característica importante de una clase incluye piscina archivo constante es dinámica. No necesariamente para producir una constante en tiempo de compilación, el tiempo de ejecución también se puede colocar en constante (pasante () de la clase String) piscina.

7. directo a memoria

La memoria no es parte directa del área de datos en tiempo de ejecución de JVM, ni es Java área de la memoria de la máquina virtual se define en la especificación, sino también OOM.

NIO JDK1.4 categoría recién añadido, basado en la introducción de un canal con el modo O tampón I /, las bibliotecas nativas se pueden asignar directamente fuera de la memoria de pila, y mediante el almacenamiento de este objeto como DirectByteBuffer montón de Java referencias de memoria operación. Copia de datos de un lado a otro para evitar la pila y pila en Java nativo, mejorando así el rendimiento.

Aquí Insertar imagen Descripción

Directo a Memoria no está limitado por el tamaño del almacenamiento dinámico de Java, pero se limitará memoria física, sino que también puede ocurrir cuando la expansión OOM dinámico.

resumen:
1. Además del contador de programa, todas las demás áreas de memoria se les ocurrirán OOM;
uso de la memoria de funcionamiento de los procesos 2.java
Aquí Insertar imagen Descripción

Publicado 11 artículos originales · ganado elogios 0 · Vistas 611

Supongo que te gusta

Origin blog.csdn.net/fei1234456/article/details/105037544
Recomendado
Clasificación