Algoritmo de tres GC

  • ¿Qué es GC?


La recolección de basura (Garbage Collection), adopta la idea del algoritmo de recolección generacional, con frecuencia recolecta la generación joven, menos recolecta la generación anterior, básicamente no mueve la generación permanente.
Según el área de reciclaje, se divide en dos tipos, uno para el Gc menor de la generación joven y el otro para el Gc mayor de la generación anterior que ocasionalmente se acompaña de la nueva generación.

  • Que es basura


La basura se refiere al espacio en memoria que ya no se usa, como el espacio de memoria de almacenamiento dinámico al que no apunta ningún objeto de referencia de pila.

Clasificación de los residuos:
 ⑴ referencia fuerte (StrongReference) [] no es spam: 常见的普通对象引用,就算出现了OOM也不会对该对象进行回收.
 ⑵ referencias blandos (SoftReference) [basura] pueden ser: 需要SoftReference类实现,内存空间不足了,垃圾回收器就会回收它.
 ⑶ referencia débil (WeakReference) 需要WeakReference类实现,只要GC,对象就被回收[basura]: .
 ⑷ de referencia virtual 虚引用主要用来跟踪对象被垃圾回收器回收的活动(PhantomReference): .

  • Cómo determinar la basura


 conteo ⑴ Referencia: 存在“循环依赖”问题,弃用;
 ⑵ método de análisis de alcanzabilidad raíz enumeración hacer: 通过一些被称为垃圾回收根(GC Roots)的对象作为起点,从这些节点开始向下搜索,搜索走过的路径被称为引用链(Reference Chain),当一个对象到 GC Roots 没有任何引用链相连时(即从 GC Roots 节点到该节点不可达),则证明该对象是不可用的;image.png

Raíz 是一组必须活跃的引用GC: .
Los objetos que pueden usarse como GC Root incluyen los siguientes 4 tipos:
 ① 栈(栈帧中的本地变量表)中引用的对象;
 ② 方法区中类静态属性引用的对象;
 ③ 方法区中常量引用的对象;
 ④ 本地方法栈中 JNI(即一般说的 Native 方法)引用的对象;

  • Condiciones de activación de GC


GC menor: el área de Eden está llena o el tamaño del objeto recién creado es mayor que el espacio restante de Eden;
GC mayor: espacio insuficiente en la generación anterior, espacio insuficiente en la generación permanente, falla de promoción en gc menor, llamada a la pantalla System.gc ();

Nota:
El fracaso de la promoción es que durante el proceso de GC menor, el espacio restante del sobreviviente no es suficiente para acomodar el eden y los objetos del sobreviviente actualmente en uso. Solo los objetos que no pueden acomodarse pueden moverse a la generación anterior (promoción). Cuando está lleno, no puede acomodar más objetos, generalmente acompañado de un gc completo, lo que conduce al fracaso de la promoción. Esta situación generalmente necesita aumentar el tamaño de la generación joven e intentar que los objetos de la nueva generación se limpien tanto como sea posible durante la generación joven.

  • Algoritmo GC


Copiar algoritmo (el algoritmo utilizado por Minor GC):

image.pngimage.png
   A partir de la raíz del GC, encuentre los objetos supervivientes de las áreas Eden y From a través de Tracing y cópielos en el área To. Una vez que se completa el GC, From y To intercambian identidades y la siguiente asignación de memoria comienza desde el área To. Cada vez que un objeto sobreviviente se somete a un GC menor, la edad aumentará en 1, y cuando alcance un cierto umbral (el valor predeterminado es 15, se puede configurar a través de -XX: MaxTenuringThreadshold), se convertirá en un objeto de vejez.
Excelente Punto No Voluntad Producir Salud Dentro de Guardar Roto \ color {red} {Ventajas: sin fragmentación de memoria;}
使 \ color {rojo} {Desventajas: requiere una baja tasa de supervivencia de los objetos y un bajo uso de memoria;}

Mark-sweep (algoritmo utilizado por Major GC):

image.png

   Cuando se agota el espacio disponible en el montón, se suspenderá todo el programa (detener el mundo) para marcarlo y limpiarlo.
Marca: comience a escanear desde la raíz del GC, marque los objetos supervivientes (objetos accesibles de la raíz del GC);
borre: recorra todo el montón, borre los objetos no marcados;
\ color {rojo} {Ventajas: simple y rápido;}
, S t o p t h e w o r l d \ color {red} {Desventajas: fragmentación grave de la memoria, suspenderá toda la aplicación (Stop-the-world);}

Mark-Compression (algoritmo utilizado por Major GC):

image.png
Marca: comience a escanear desde la raíz del GC, marque los objetos supervivientes (objetos accesibles de la raíz del GC);
compresión: atraviese todo el montón, mueva los objetos marcados a un extremo y limpie directamente la memoria más allá del límite;
\ color {red} {Ventaja: sin fragmentación de memoria;}
, \ color {red} {Desventajas: la memoria debe cambiar constantemente, la eficiencia se vuelve baja y se suspenderá toda la aplicación;}

Mark-Sweep-Compression (algoritmo utilizado por Major GC):
  1. La combinación de Mark-Swap y Mark-Compact;
  2. De acuerdo con Mark-Swap, respete después de múltiples GC;

Pequeño resumen:

La generación menor Minor GC utiliza un algoritmo de copia, la
generación anterior Major GC utiliza un algoritmo mark-sweep y mark-sweep-compress;

Eficiencia de la memoria: algoritmo de copia> borrado de marca> compresión de marca;
uniformidad de la memoria: algoritmo de copia = compresión de marca> borrado de marca;
tasa de utilización de la memoria: borrado de marca = compresión de marca> algoritmo de copia;

Enlace de referencia:
https://www.cnblogs.com/Mufasa/p/11226913.html

15 artículos originales publicados · Me gusta0 · Visitas 72

Supongo que te gusta

Origin blog.csdn.net/xrzi2015/article/details/105599272
Recomendado
Clasificación