Saltar al contenido principal

¿Qué es la recolección de basura de Java? Resumen de los conceptos de Marcar y barrer, Joven, Viejo y Permanente

  • Cuando se programa en Java, a menudo se escucha el término recolección de basura. Aunque el desarrollo es posible sin este conocimiento en las primeras etapas de desarrollo, es bueno saberlo para optimizar el rendimiento o evitar pérdidas de memoria.
  • Este es uno de los temas más frecuentes en entrevistas en empresas que utilizan Java.
  • En este documento, resumiremos la recolección de basura de Java para que pueda comprenderla fácilmente. *Este es un breve resumen para ayudarte a comprender conceptos desconocidos, por lo que te recomendamos leer otros artículos para obtener información detallada.

¿Qué es la recolección de basura?

  • El nombre Garbage Collection significa recolección de basura. Recopila automáticamente la memoria no utilizada
    • Memoria no utilizada: Memoria que ya no se utiliza.
    • Recolección de memoria: Libera memoria no utilizada para poder usarla nuevamente.
  • La gestión de la memoria Java se realiza a través de JVM.
    • En los lenguajes existentes, el programador tenía que manejar la asignación y desasignación de memoria directamente. Si la memoria no se libera correctamente, la memoria no utilizada continúa acumulándose y se produce una pérdida de memoria.
    • JVM es una máquina virtual, procesa la asignación y desasignación de memoria automáticamente sin que el usuario tenga que preocuparse
    • Especifique el tamaño de memoria que utilizará la JVM dando una opción de JVM al ejecutar el programa.
    • La pérdida de memoria a nivel del sistema operativo se evita al no acceder directamente a la memoria del nivel del sistema operativo.
  • La recolección de basura protege la memoria eliminando objetos inalcanzables del área del montón
    • objeto inalcanzable: un objeto al que ya no se hace referencia

¿Qué es marcar y barrer?

  • característica *La recolección de basura se realiza mediante el método Marcar y Barrer
    • El estado de la memoria después de la recolección de basura es un estado en el que el espacio de la memoria está asegurado.

Marca

  • Busca y marca un objeto alcanzable. Garbage Collector escanea todas las variables en la pila para encontrar a qué objeto hace referencia cada una.
  • Todos los hilos están detenidos por el trabajo de Mark, esto se llama detener el mundo
  • Por las razones anteriores, puedes provocar explícitamente la recolección de basura llamando a System.gc(), pero esto no se recomienda.

Barrer

  • característica
    • Eliminar objetos no marcados. Eliminar objeto inalcanzable

Área del montón: joven (Eden, Survivor), viejo, permanente

  • El área del montón consta de áreas de generación joven, generación anterior y permanente *Consta de un total de 5 áreas
    • Generación joven: Eden, Superviviente 0, Superviviente 1
    • Vieja generación
    • Región Permanente

imagen

Generación joven

  • Compuesto por el área de Eden, el área de Survivor 0 y Survivor 1
  • Reino del Edén
    • Dónde se encuentra el objeto recién creado
    • El GC menor ocurre cuando el área del Edén está llena
  • Zona de supervivientes
    • Dónde se encuentran los objetos supervivientes en el reino del Edén
    • Hay dos áreas, S0 y S1, una de las cuales está vacía y la otra contiene objetos supervivientes.
    • Mueva los objetos supervivientes del área de Eden y del área de Survivor no vacía al área de Survivor vacía.
    • El valor de edad aumenta al pasar de un área de superviviente a otra área de superviviente.
    • Muévete de la siguiente manera
      • Hay objetos supervivientes en S0 y S1 está vacío -> Mueva el área del Edén y los objetos supervivientes de S0 a S1
      • Hay objetos supervivientes en S1 y S0 está vacío -> Mueva el área del Edén y los objetos supervivientes en S1 a S0
    • Al moverse, el valor de edad aumenta y los objetos supervivientes se mueven a otra área de supervivientes.

Vieja generación

  • característica
    • Los objetos que sobreviven en la Generación Joven se trasladan a la Generación Vieja cuando su valor de edad excede un cierto valor.
    • El paso anterior se llama Promoción

Zona permanente

  • característica
    • Dónde se almacenan los metadatos, información de clase, etc.
    • Cambiado a Metaspace a partir de Java 8

GC menor y GC mayor y GC completo

  • El GC se divide en GC menor, GC mayor y GC completo según el área del montón que se organiza.

Menor G.C.

  • característica
    • GC ocurre en la Generación Joven
    • Mueve los objetos supervivientes de la zona Edén a la zona de supervivientes
    • Cuando el área de supervivientes esté llena, mueve los objetos supervivientes a Generación antigua
  • orden
    • El GC menor ocurre cuando el área del Edén está llena
    • Mueva los objetos supervivientes del área de Eden y del área de Survivor al área vacía de Survivor
      • Edén + S0 -> S1 o Edén + S1 -> S0
    • El valor de edad aumenta al moverse.

Mayor G.C.

  • característica
    • GC que ocurre en la vieja generación
    • La GC mayor ocurre cuando el área de Vieja Generación está llena.
    • Elimina objetos inalcanzables del área de Vieja Generación

GC completo

  • característica
    • Realizar GC en las áreas de Generación Joven, Generación Vieja y Permanente.
    • Cuando se produce GC completo, se detienen todos los subprocesos.
    • Cuando se produce GC completo, se producen GC mayor, GC menor y GC de área permanente.

fuente