La comprensión en profundidad de JVM: Garbage Collection

En primer lugar, la recolección de basura aprender necesidad

Cuando tenga que solucionar una variedad de problemas de desbordamiento de memoria cuando la recolección de basura se convierte en un cuello de botella cuando el sistema alcanza una concurrencia superior, necesitamos implementar el control y la regulación necesaria de estas tecnologías "Automatización".

Dos, JVM asignación de memoria y la recuperación

La recolección de basura es la memoria principalmente montón de la máquina virtual. diagrama de pila es el siguiente:

eden región se muestra arriba, s0 ( "De") región, s1 ( "A") pertenecen a la zona nueva generación, área tentired pertenece años de edad.

Hay dos tipos de recolección de basura

  • GC Nueva Generación (Menor GC) : se refiere a la nueva generación de la acción de recolección de basura se lleva a cabo en, menor GC con mucha frecuencia, la velocidad de recuperación es generalmente más rápido.
  • GC de edad (Mayor CG / Full GC) : se refiere al lugar en la vejez GC, aparecido en Mayor CG menudo acompañado por al menos uno de los Menores GC (no absoluta), la velocidad del Mayor CG es generalmente más lento que el menor de GC de más de 10 veces .

Asignar memoria para el objeto

región de Edén se muestra arriba, s0 ( "De") región, s1 ( "A") pertenecen a la zona nueva generación, área tentired pertenece años de edad

En la mayoría de los casos, el primer objetivo será la asignación de memoria en el Edén anteriormente. Si no hay suficiente espacio para el tiempo. Primero realizará un GC Minor, el GC se produce normalmente en el Edén y s0 ( "de"), si hay objetos en directo para entrar en s1, y la edad del sujeto se sumará 1 (Eden District -> edades iniciales después superviviente de áreas sujetas se convierte en 1), cuando su edad hasta cierto punto (el valor por defecto es de 15 años), será promovido a la vieja era. Después de esto GC, eden y el área s0 se han vaciado, a continuación, cambiar s1 y s0, objetos vivos también experimentarán el próximo GC Minor, si sigue vivo, por lo que la edad será + 1, GC Minor se repetirá este proceso, hasta que la "a" se llena la zona, después de la "a" se llena zona, todos los objetos se moverán a la vieja era.

estrategia de asignación de memoria del montón común

(1) asignar un objetivo prioritario en la zona Eden (2) objetos de gran tamaño directamente en la vieja año (3) supervivencia a largo plazo del objeto entrará en el viejo año

Determinación de la edad de los objetos dinámicos

Con el fin de adaptarse mejor a las diferentes circunstancias de la memoria del programa, la máquina virtual no siempre se requiere de edad objetivo debe alcanzar un cierto valor con el fin de entrar en la vieja era, si la suma del espacio sobreviviente de la misma edad es más de la mitad del tamaño de todos los objetos en superviviente de espacio, mayor de edad igual o superior a objetos de esa edad se puede ir directamente años, quizá no hayan alcanzado los requisitos de edad.

En tercer lugar, el objeto ya está muerto?

El análisis de accesibilidad

La idea básica es que a través de una serie de algoritmos llamado  "Raíces GC"  objetos como punto de partida, para iniciar la búsqueda hacia abajo desde estos nodos, los nodos camino recorrido se llama una cadena de referencias, cuando un objeto no tiene referencias a GC cadena Roots conectado, a continuación, se demuestra que este objeto no está disponible.

72762049.jpguploading.gifSubiendo ... volver a subir cancelado

Roots GC se pueden utilizar como un objeto:

(1) Virtual pila de la máquina (marco de pila tabla de variables locales) objeto referenciado.

Clase (2) método del objeto referenciado por la zona de propiedades estáticas.

Las referencias a objetos (3) Método de región constante.

(4) En las pilas de método nativo JNI (es decir método local) de la referencia de objeto.

Si el objeto de la muerte

(1) marcó la primera vez: objetos inalcanzables de análisis de alcanzabilidad se criban. condición de detección es si este objeto es necesario para realizar el método de finalización. Cuando el objeto es ningún método de finalización, o el método de finalización se ha cubierto máquinas virtuales de llamadas obsoletos, máquinas virtuales, estos dos casos considerados innecesario realizar.

(2) En segundo lugar marcado: objetos a ser filtrada se coloca en una cola F-Queue, montón GC después de una segunda pequeña etiqueta F-Queue. La cola finalizará la ejecución del método.

Los objetos también pueden salvarse a sí mismos, en el método de finalización es con referencia a sus objetos asociados puede ser cualquiera de una cadena, que se puede quitar de la cola.

Pero sólo con el fin de salvarse a sí mismos, porque cualquier sistema de objetos método finalize sólo se llama una vez.

En cuarto lugar, las referencias

(1) Un fuerte referencia: Obeject obj = new Object (); tales referencias recolector de basura nunca se recuperó off que se hace referencia el objeto.

(2) Soft Cita: Hay, pero no necesariamente con el objeto, el sistema se producirán antes de la excepción de desbordamiento de la memoria, estos objetos serán incluidos en el alcance de la recuperación para el segundo recuperó.

(3) una referencia débil: para sobrevivir sólo hasta que se produce la siguiente recogida de basura. Cuando el trabajo de recolector de basura, independientemente de si dispone de suficiente memoria, se recuperará

(4) una referencia imaginaria: más débil. objetos de referencia Phantom se utilizan principalmente para el seguimiento de la recuperación de las actividades de desecho.

En quinto lugar, el algoritmo de recolección de basura

(1) marca - algoritmo de barrido

El algoritmo se divide en "marca" y el estadio "claro": primera marca de todos los objetos tienen que ser recuperado, todos los objetos se marca unificada de recuperación después del marcaje es completa. Es el algoritmo más básica de captura, los algoritmos son posteriores mejorada para dar sus deficiencias. Esta basura algoritmos de recolección traerán dos problemas obvios: la ineficiencia y la memoria fragmentación.

· å¬ä¼å

(2) la replicación del algoritmo

Con el fin de los problemas de eficiencia dirección, "copia" apareció algoritmo de colección. Puede ser el mismo tamaño de la memoria en dos, cada uno de los cuales se utiliza. Cuando el uso de la memoria después de éste, sino que también objetos vivos copiado a otra pieza al espacio y luego se usa una vez y luego salga limpio. Esto permite que cada memoria recuperada es la memoria de la mitad del intervalo para el reciclaje.

· å¬ä¼å

Este algoritmo actualmente utilizado algoritmo generacional utilizado en la nueva generación, la nueva generación no es de acuerdo con el 1: 1 se divide, pero se divide en (eden + s0) s1 y las dos partes.

(3) marca - Algoritmo de clasificación

De acuerdo con una característica del etiquetado propuesto años algoritmo proceso de edad, todavía marcado y "marca - barrido" algoritmo es el mismo, pero no directamente próximos pasos para la recuperación de objetos reciclables, sino para todos los objetos que sobreviven se mueve hacia un extremo, y luego directamente a limpio memoria que no sea la frontera final.

æ ° E® -æ'çç®æ³

El algoritmo utilizado para uso años de edad,

(4) algoritmo colección generacional

La máquina virtual de recolección de basura actual implementa un algoritmo generacional colección, que no es otra idea nueva, pero de acuerdo a diferentes objetos sobrevivir períodos de memoria en unas pocas piezas. En general, la pila de Java en la nueva generación y la vieja era, por lo que puede elegir el algoritmo de recolección de basura adecuado en función de las características de cada época.

Por ejemplo, en la nueva generación, cada colección tendrá un gran número de objetos a morir, por lo que puede elegir copiar algoritmo, sólo tendrá que pagar el costo de reproducción de la pequeña cantidad de objetos para completar cada recolección de basura. posibilidad de que la edad del objetivo de la supervivencia es relativamente alta, y no hay espacio adicional se asigna a su garantía, por lo que hay que seleccionar la "marca - barrido" o "marca - acabado" algoritmo para la recolección de basura.

En sexto lugar, el recolector de basura

(1) colector de serie

Se trata de un único subproceso colector, cuando de recolección de basura, hilos debe suspender todas las demás tareas.

46873026.jpguploading.gifSubiendo ... volver a subir cancelado

Ventajas: sencilla y eficiente.

Contras: proporcionan a los usuarios una mala experiencia, hay una sensación de pausa.

(2) ParNew colector

Esta es una versión multi-hilo de una serie,

ParNew æ¶éå¨

Es la primera opción de muchas máquinas virtuales que se ejecutan en modo de servidor, además de colector de serie, sólo funciona con un colector de CMS (colector concurrente en el verdadero sentido, se introdujo más tarde a).

El concepto de paralelo y concurrente añadido:

  • Paralelo (Parallel)  : se refiere al número de hilos en la recolección de basura paralelo, pero esta vez el hilo de usuario se encuentra todavía en un estado de espera.

  • Concurrencia (concurrente) : se refiere al hilo de rosca de usuario y la recolección de basura mientras se realiza (pero no necesariamente en paralelo, se puede realizar alternativamente), el programa de usuario continúa funcionando, y los ejecuta el recolector de basura en otra CPU.

(3) paralela colector Scavenge

Scavenge colector paralelo también utilizan el colector algoritmo de copia multi-hilo,

Paralelo preocupación colector Scavenge es el rendimiento (uso eficiente de la CPU). Enfoque CMS y otra vez la basura colector de pausa es más subprocesos de usuario (la mejora de la experiencia del usuario). Throughput se denomina tiempo de CPU CPU para la relación del código de usuario tiempo total de funcionamiento lento.

(1) (2) (3) utilizando la nueva generación de algoritmo de replicación, utilizando de antigua marca - Algoritmo de clasificación.

(4) Serial colectores viejos

La versión de edad del colector de serie , sino que también es un único subproceso colector. Tiene dos propósitos principales: Un uso es en JDK1.5 y versiones anteriores y colector Scavenge paralelo con el uso de otro uso es como un plan alternativo, colector CMS.

(5) paralela colectores viejos

La versión de colector Scavenge paralelo de la edad . El uso de multi-threading y "marca - acabado" algoritmo. Enfoque en el rendimiento de la CPU y los recursos de la ocasión, se puede dar prioridad al colector Scavenge paralelo y paralelo colector antiguo.

(6) colector de CMS

CMS (concurrente marca y barrido) es un colector para el tiempo de recuperación más corto colector objetivos pausa. Es consistente con el enfoque en la experiencia del usuario en el uso de la aplicación.

CMS (concurrente marca y barrido) HotSpot colector máquina virtual es el primer verdadero coleccionista concurrente en el sentido de que por primera vez se dio cuenta de la hebra de recogida de basura y dejar que el hilo de usuario (básicamente) al mismo tiempo.

El uso de la marca - barrido "algoritmo

etiquetas iniciales:  suspenden todos los demás hilos, y el objeto de grabación conectado directamente a la raíz, rápido;

marca concurrente:  simultáneamente convertido GC y el hilo de usuario, con una estructura de cierre para grabar hasta el objeto. Pero al final de esta etapa, esto no garantiza una estructura de cierre que contiene toda la corriente hacia arriba a objeto. Debido a que el hilo de usuario puede ser campo de referencia actualiza continuamente, por lo que el hilo de GC no puede garantizar la accesibilidad de los análisis en tiempo real. Así que este algoritmo en su lugar hará un seguimiento de estas actualizaciones suceder referencias.

Relabeled:  re-marcado durante la fase de corrección es la marca concurrente como resultado del programa de usuario continúa funcionando esa parte del objeto de las fluctúa Mark Mark registro, el tiempo de permanencia en esta etapa por lo general ligeramente más largo que el tiempo de la fase inicial de la marca, mucho más que el concurrente corto tiempo de fase marca

Concurrente claro:  abrir el hilo de usuario, mientras que el hilo de GC comienza a hacer la limpieza de la zona marcada

åå¾æ¶éå¨ CMS

 

(7) colector G1

G1 (Garbage-First) es un servidor para un colector de basura, principalmente durante el mismo tiempo con varios procesadores y gran capacidad de memoria de la máquina. Alta probabilidad de cumplir los requisitos de GC tiempos de pausa, que comprende además un alto rendimiento características de rendimiento.

Una característica importante de la evolución se considera JDK1.7 la máquina virtual HotSpot. Tiene las siguientes características:

  • Paralela y concurrente : G1 puede hacer pleno uso de las ventajas de hardware debajo de la CPU, el medio ambiente multi-núcleo, el uso de múltiples CPU (CPU o núcleo de la CPU) para acortar el tiempo de pausa Detener-el-mundo. Algunos de los otros colectores de otro modo requeriría GC pausa de Java acción de ejecución del hilo, colector G1 todavía permite que el programa Java a modo concurrente para proceder.
  • colección generacional : A pesar de que el G1 puede no ser necesario con otros coleccionistas será capaz de gestionar de forma independiente todo el montón GC, pero aún conserva el concepto de generacional.
  • La integración espacial : con la "marca - limpieza" CMS diferentes algoritmos, G1 se basa en las "etiquetas para organizar" algoritmo implementado en la colección entera; se basa en el algoritmo de "copia" desde el punto de vista local.
  • pausa predecible : Este es el G1 con respecto a la otra gran ventaja de la CMS, G1 se reduce de permanencia tiempo y la preocupación común de la CMS, pero además de la búsqueda de la pausa bajo G1, el modelo de tiempo de pausa puede establecer una predecible, lo que permite su uso especificando explícitamente un segmentos de tiempo de longitud M en milisegundos.

colector G1 operación más o menos dividido en los siguientes pasos:

  • La marca inicial
  • marca concurrente
  • La nota final
  • Reciclaje de filtro

colector G1 en el fondo mantiene una lista de prioridades, de acuerdo con cada tiempo de recogida permitido, el valor máximo de la recuperación de preferencia Región (que es el origen de su nombre es basura-First) . Este espacio de memoria se divide usando métodos de recuperación región priorizadas Región y, para asegurar que la eficiencia de recolección tiempo colector GF limitado puede ser tan alta como sea posible (la memoria desmembrado).

Referencia: https://snailclimb.gitee.io/javaguide/#/docs/java/jvm/JVM%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6?id= _4-% E5% 9E% 83% E5% 9C% BE% E6% 94% B6% E9% 9B% 86% E5% 99% A8

 

Publicados 134 artículos originales · ganado elogios 91 · vistas 160 000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_44588495/article/details/104097669
Recomendado
Clasificación