21 días para aprender Java (Java SE Parte IV): la máquina virtual de Java, la recolección de basura

Java Virtual Machine (JVM)

Para el análisis de Java orientado a objetos de memoria, primero debemos saber cuál es la máquina virtual de Java (Java Virtual Machine, JVM) que? JVM es capaz de ejecutar código de bytes de Java máquina virtual. Como una máquina virtual lenguaje de programación, de hecho, no sólo es un espacio dedicado al lenguaje Java, siempre y cuando los archivos generados por el compilador que responden a las exigencias de la JVM para cargar el formato de archivo compilado, en cualquier idioma puede correr compilado por la JVM. Y mediante el uso de la máquina virtual de Java, se puede resolver el problema de la cruz-plataforma.

La estructura básica de la JVM

JVM está formado por tres subsistemas principales

  • subsistema de cargador de clases
  • áreas de datos de tiempo de ejecución (estructura de memoria)
  • motor de ejecución

mecanismo de carga Clase

ciclo de vida de la clase

ciclo de vida del diagrama de flujo de Clase

1. Carga: El archivo .class se lee del disco en la memoria

2. Conectar

2.1 verificar: verificación de la corrección del archivo de código de bytes ( Suma )

2.2 Preparación: variables estáticas a la clase de la asignación de memoria, y dado un valor predeterminado

2.3 Análisis: todas las otras clases (enlazados estáticamente) carga cargador de clases de una clase se le haga referencia

3. Inicialización: variables estáticas dadas como el valor inicial correcta de la fase de preparación para la variable estática se asigna a un valor inicial predeterminado máquina virtual dado aquí es el programador por el valor real de la variable de asignación inicial, la realización de bloque de código estático

4. Uso: Ejecutar programa

5. Desinstalar: Programa Final

Tipo de cargador de clases

  • Inicio cargador de clases (en arranque cargador de clases)
    responsable de cargar las bibliotecas de clases básicas JRE, como rt.jar relación con el objetivo de JRE, charsets.jar etc.
  • cargador de clases de extensión (extensión cargador de clases)
    responsable de cargar el directorio de extensión frasco ext JRE en el paquete de clases
  • cargador de clases del sistema (Aplicación cargador de clases)
    es responsable de cargar las clases en la ruta de clase ruta del paquete
  • cargador de encargo (cargador de clases de usuario)
    se encarga de cargar la ruta del paquete de clase definida por el usuario

Tipo de cargador de clases

mecanismo de carga Clase

  • Un mecanismo global de delegación responsabilidad
    cuando un cargador de clases cuando se carga una clase, a menos que otro programa de cargador de clases, que la clase es dependiente y la clase referenciada también está cargado por el cargador de clases

  • Los padres mecanismo de delegado
    se refiere a delegar el cargador de clases padre para encontrar la clase de destino, en el caso de la descarga no puede encontrar su propio camino para encontrar y cargar la clase de destino

  • Ventajas padres modo delegado

    1. caja de arena mecanismo de seguridad: no se cargará por ejemplo, para escribir sus propias clases String.class, lo que evita la manipulación de la biblioteca central es
    2. Libre repetida clase de carga: cuando el cargador de clases padre ya cargado el tiempo de clase, no es necesario niño ClassLoader cargado una vez más

área de datos en tiempo de ejecución (análisis de memoria)

1. Región Method (Método Area) (jdk1.8 anteriormente llamada Generación permanente / de generación permanente, en adelante denominado espacio de elementos)

(1) JVM es el área de una sola manera, compartida por todos los temas

zona (2) Método de pila es real sólo para el almacenamiento de constantes de información de clase asociados

(3) Método usado para almacenar el contenido del programa es siempre constante o solamente, todos los campos y métodos de la clase de código de bytes, y algunos métodos especiales como constructor, código de la interfaz está también definido en el presente documento. En pocas palabras, toda la información de proceso definido se almacenan en la región, la información variable + constante + clase estática (definición Constructor / interfaz) + tiempo de ejecución de la piscina constante (categoría String) están presentes en el método de la zona .

2. Pila (Stack)
modelo de memoria para llevar a cabo el método de hilos de Java, un hilo correspondiente a una pila, cada método creará un marco de pila (mientras que la ejecución para el almacenamiento de tabla local variable, el pila de operandos, enlace dinámico, las exportaciones método información ) problema de la recolección de basura no existe, las características de almacenamiento de la pila siguen el "último en salir, último en entrar, primero en salir" , siempre y cuando al final de una pila de subprocesos se libera, y el ciclo de vida del mismo hilo. Y la pila se asigna automáticamente por el sistema, de alta velocidad, la pila es un espacio de memoria contigua.

3. montón (Heap)

(1) de pila se utiliza para almacenar los objetos y arrays creados ( arrays son objetos )

(2) JVM es solamente un montón, es compartida por todas las discusiones

(3) la pila no es un espacio de memoria contigua, asignación flexible, lento.

(4), mientras que la pila es también la principal región de gestión recolector de basura, recolección de basura, ver detalles a continuación.

4. Un método nativo pilas (Método Nativo Pila)

Y el efecto chimenea es muy similar, pero la diferencia es la pila de Java JVM para la ejecución del método de servicio de Java, mientras que las pilas de métodos nativos para la implementación JVM del servicio método local (nativo). método de registro local, un método para cargar una biblioteca local en el cumplimiento motor de ejecución.

El contador de programa (Programa Contador Registro)
es un puntero a un método de región de código de bytes Método (puntos utilizados para almacenar la dirección de la siguiente instrucción, el código de instrucción es también va a realizar), la siguiente instrucción es leído por el motor de ejecución es un espacio muy pequeño de memoria, casi insignificante

La recolección de basura

En la introducción del montón de Java mecanismo de recolección de basura, de manera que los programadores de C ++ mayoría de los problemas de gestión de memoria dolores de cabeza de inmediato. Así que los programadores de Java pueden poner más energía en la lógica de negocio en lugar de trabajo de gestión de la memoria, lo que mejora la eficiencia del desarrollo.

Los programadores pueden escribir su propio System.gc(), pero esto no es una llamada al recolector de basura, acaba de empezar el programa recomendado GC, ya sea para iniciar o controlado por el mecanismo de recolección de basura.

New Generation (Generación Young)

Como el nacimiento, el crecimiento y la desaparición de la región, donde se genera una clase, la aplicación, después de recoger el recolector de basura, al final de la vida.
Cenozoico se divide en dos partes: Eden District (espacio Edén) y zona de sobrevivientes (superviviente del Espacio) , todas las clases son en la nueva zona de Edén. Sobrevivir área se divide en la zona de De y A. Cuando el área de Eden del espacio se agota, el programa y la necesidad de crear un objeto, recogida recolector de basura de la basura de la JVM (Menor GC) Eden District, la zona de Eden del objeto ya no se aplica a otros objetos fueron destruidos. A continuación, la zona restante Eden desde superviviente del objeto a la región. De sobreviviente Si el área está llena, entonces el área de recolección de basura, y luego se trasladó a la región para Survivor.

Años (vieja generación)

Después de la nueva generación de objeto más de una vez (por defecto 15 veces) GC movimiento aún con vida a la zona de la vejez. Si el año de edad estaba lleno, Mayor CG (también puede llamarse completa GC) sucederá esta vez, para la memoria a limpiar las zonas de mayor edad. Si el área de ancianos ejecutar un GC completa encontró todavía no puede guardar el objeto, lanza OOM excepción (OutOfMemoryError).

espacio de elementos (Meta Espacio)

Después JDK1.8, metaespacio reemplazar generaciones permanentes, que es una implementación del método región especificación JVM, excepto que el área de metadatos que no está en la máquina virtual, pero con la memoria local, la máquina virtual en cuyo nombre el, sustituyendo permanente permanente también pertenecen a la estructura lógica de la pila, pero no físicamente.
¿Por eliminado de forma permanente generaciones? : Referencia explicación oficial

Publicado seis artículos originales · ganado elogios 21 · vistas 2282

Supongo que te gusta

Origin blog.csdn.net/qq172387778/article/details/105315011
Recomendado
Clasificación