Nuevas características

Nuevo recolector de basura basado en Java

Para esta release 6.1.0-Warcraft de Onesait Platform hemos estado probando y soportando el nuevo Garbage Collector de Java, denominado ZGC, que permite minimizar los tiempos de pausa de la JVM haciéndolo muy apropiado para aplicaciones de baja latencia y que requieren un alto rendimiento.

A partir de esta versión, por tanto, se podrá habilitar este Garbage Collector para entornos que lo requieran.

¿En qué consiste?

El Gargabe Collector Z es un algoritmo de recolección de basura bastante novedoso que ha introducido Oracle en el JDK 11 con el objetivo de minimizar los tiempos de pausa de las aplicaciones en la máquina virtual de Java (JVM), lo que lo convierte en una opción muy oportuna para aplicaciones modernas que requieren una latencia extremadamente baja y un alto rendimiento, como decíamos en la introducción.

El enfoque de este recolector es generacional, dividiendo la memoria disponible en dos generaciones principales: la generación joven y la generación vieja (o generación madura). La generación joven se subdivide a su vez en el espacio de «Eden» y dos espacios de supervivencia («Survivor Spaces»), mientras que la generación vieja es donde se reubican los objetos de vida prolongada.

Características

Este recolector se caracteriza por:

  • Un enfoque en la baja latencia: la característica más destacada del ZGC es su capacidad para garantizar tiempos de pausa consistentemente cortos. Esto se logra reduciendo al mínimo las pausas de tipo «stop the world» (STW), donde se detienen todos los hilos de la aplicación para realizar la recolección de basura. Esto lo convierte en una opción excelente para aplicaciones que exigen respuestas casi instantáneas, como sistemas de comercio electrónico, servicios financieros y juegos en tiempo real.
  • Escalabilidad: está diseñado para gestionar eficientemente cantidades de memoria muy grandes, desde unos pocos gigabytes hasta varios terabytes. Esta capacidad de manejar grandes volúmenes de datos lo hace particularmente útil para aplicaciones intensivas en memoria, como sistemas de análisis de datos, bases de datos en memoria y aplicaciones de Big Data.
  • Fases concurrentes: cuenta con la capacidad de llevar a cabo tareas críticas de recolección de basura, como el marcado, la reubicación de objetos y el procesamiento de referencias, de manera concurrente con los hilos de la aplicación. Esto significa que la mayor parte del trabajo de recolección se realiza sin detener la ejecución de la aplicación, minimizando significativamente las pausas de tipo STW.
  • Rendimiento consistente y predecible: está diseñado para ofrecer un rendimiento estable y predecible. Busca mantener los tiempos de pausa dentro de un límite predefinido, algo crucial para aplicaciones con requisitos estrictos de latencia. Esto es especialmente importante en entornos de producción donde las interrupciones pueden afectar gravemente la experiencia del usuario o el funcionamiento del sistema.
  • Compatibilidad con Oops comprimido: es compatible con Compressed Oops (Ordinary Object Pointers), lo que le permite trabajar de manera eficiente con referencias de 32 bits incluso en plataformas de 64 bits. Esto se traduce en un uso más eficiente de la memoria, ya que reduce el espacio necesario para almacenar referencias a objetos en el montón.

Ventajas frente a otros recolectores

A diferencia de otros recolectores de basura tradicionales, como pueden ser G1 o Parallel GC, que pueden presentar mayores tiempos de pausa a medida que aumenta el tamaño del montón, ZGC mantiene tiempos de pausa reducidos independientemente del tamaño del montón. Esto lo hace especialmente útil para aplicaciones que requieren un tiempo de respuesta consistente y rápido, independientemente de la carga de trabajo o el tamaño de la memoria.


Imagen de cabecera: Cristian Macovei en Unsplash
DZone: Java Z Garbage Collector (ZGC): Revolutionizing Memory Management

✍🏻 Author(s)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *