"Comprensión profunda de la máquina virtual" lectura de algoritmos de recolección de basura

Algoritmo de recolección de basura

  • Mark-Sweep
    • Marque los objetos que deben reciclarse y borre el área de memoria de todos los objetos reciclados.
    • El proceso de marcado y eliminación no es eficiente
    • Habrá una gran cantidad de fragmentación de memoria discontinua, que no es propicia para asignar objetos grandes (cuando no hay suficiente memoria continua, se activará otra recolección de basura).
  • Stop-copy
    • Divide la memoria disponible en dos bloques. Solo se usa un bloque a la vez, y cuando la memoria se agota, los objetos vivos se colocan regularmente en otro bloque de memoria.
    • El área de memoria es regular, y solo necesita mover el puntero para asignar memoria.
    • Desventajas: la mitad de la memoria se desperdicia.
  • Mark-Compact
    • Marque los objetos que deben reciclarse, mueva los objetos vivos a un extremo de la memoria y luego borre la memoria fuera del límite
  • Colección generacional
    • La mayoría de los objetos de la nueva generación son "a causa de la muerte", solo unos pocos sobreviven, utilizando el algoritmo de "copia"
    • En la generación anterior, debido a la alta tasa de supervivencia de los objetos y a la falta de garantía de asignación, marca clara o marcación
  • Implementación del algoritmo HotSpot
    • Enumerar nodos raíz
      • En GCRoots, es demasiado lento verificar todas las áreas de memoria y se requiere STW para garantizar la coherencia.
      • Por lo tanto, es necesario garantizar un GC preciso y saber directamente dónde existe la referencia del objeto.
      • OopMap, cuando se completa la carga de la clase, calcula qué tipo de datos está en el desplazamiento en el objeto, y en la compilación JIT justo a tiempo, también registra en la posición específica qué posición en la pila y el registro es la referencia.
    • Punto de seguridad
      • Selección de punto de seguridad
        • OopMap no se generará para cada instrucción, solo se registrará en la ubicación específica anterior, es decir, el punto de seguridad
        • La ejecución del programa solo se detiene cuando alcanza un punto seguro para GC.
        • Por lo tanto, la selección del punto de seguridad se basa en "si tiene las características de permitir que el programa se ejecute durante mucho tiempo" como estándar, generalmente la multiplexación de secuencia de instrucciones, como la invocación de métodos, el salto de bucle, el salto de excepción, etc.
      • Cómo garantizar que todos los hilos lleguen al punto seguro más cercano cuando el GC se detenga
        • Suspensión preventiva
          • No utilizado
          • Interrumpir todos los hilos. Compruebe si algún hilo no alcanza el punto seguro, luego reanude el hilo y déjelo correr hasta el punto seguro.
        • Suspensión Voluntaria
          • Establezca la bandera de interrupción, sondeada activamente por otros hilos. Cuando se descubre que la bandera de interrupción es verdadera, se interrumpirá a sí misma.
          • El momento del sondeo coincide con el punto de seguridad, además de la necesidad de asignar memoria al crear objetos.
          • Cuando es necesario suspender el subproceso, la máquina virtual establece la página de memoria en un desplazamiento para que no se pueda leer, cuando el subproceso

    • Zona segura
      • Cómo garantizar que los hilos no asignados a segmentos de tiempo respondan a las interrupciones del GC
      • Área segura significa que en un fragmento de código, la relación de referencia no cambiará.
      • Principio de implementacion
        • Cuando el hilo ejecuta el código en el área segura, se identificará para ingresar. Durante este proceso, la JVM inicia el GC e ignora el hilo que ingresa al área segura.
        • Cuando el subproceso abandona el área segura, verifica si las Raíces GC (o todo el proceso Gc) se han completado.
        • Si se completa, continúe ejecutándose, de lo contrario espere la señal que puede salir del área segura.
Publicado 24 artículos originales · elogiado 0 · visitas 99

Supongo que te gusta

Origin blog.csdn.net/jiangxiayouyu/article/details/105614281
Recomendado
Clasificación