A logo showing the text blog.marcnuri.com
English
Inicio»Java»Garbage Collectors / Recolectores de Basura de Java para la Nube

Entradas Recientes

  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js
  • El Futuro de las Herramientas para Desarrolladores en la era de la IA
  • Conectarse a un servidor Model Context Protocol (MCP) con Java y LangChain4j

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • agosto 2022
  • julio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Garbage Collectors / Recolectores de Basura de Java para la Nube

2024-06-30 en Java etiquetado Java / JVM / Memoria / Rendimiento / Cloud / Kubernetes por Marc Nuri | Última actualización: 2025-01-19
English version

Introducción

La recolección de basura es una parte fundamental de la Máquina Virtual de Java (JVM) que libera memoria eliminando objetos que ya no son necesarios para la aplicación. La JVM tiene varios recolectores de basura, cada uno con sus propias características, pros y contras en cuanto a su rendimiento.

En la nube, la recolección de basura es aún más crítica, ya que las aplicaciones a menudo tienen que lidiar con grandes cantidades de datos, alto tráfico y se ejecutan en entornos con recursos limitados. Además, las aplicaciones cloud-native deben ser escalables y a veces efímeras. Si la recolección de basura no se gestiona correctamente, puede provocar una degradación del rendimiento, un aumento de la latencia e incluso la caída de la aplicación.

En este artículo, exploraremos los diferentes recolectores de basura disponibles en la JVM y cómo elegir el más adecuado para tus aplicaciones cloud-native.

¿Qué es la Recolección de Basura?

La Recolección de Basura es el proceso de liberar automáticamente memoria eliminando objetos que ya no son necesarios o están en uso por la aplicación. Esto evita que los desarrolladores tengan que gestionar la memoria manualmente, facilitando la escritura y el mantenimiento de las aplicaciones Java.

La JVM tiene un recolector de basura que se ejecuta en segundo plano, escaneando periódicamente el heap de memoria en busca de objetos que ya no son necesarios. Cuando encuentra un objeto que ya no está referenciado por la aplicación, lo marca para su eliminación y recupera la memoria que estaba utilizando.

Tipos de Recolectores de Basura

La JVM ofrece varios recolectores de basura, cada uno con sus propias características y pros y contras en cuanto a su rendimiento. Los recolectores de basura más comunes son:

Serial Garbage Collector

Es el más sencillo de los algoritmos de recolección de basura. Detiene todos los hilos de la aplicación y luego escanea el heap para encontrar objetos que ya no se están utilizando.

Parallel Garbage Collector

Este recolector de basura es similar al serial garbage collector, pero utiliza varios hilos para escanear el heap. Esto puede mejorar el rendimiento aprovechando varios núcleos de CPU. Es más adecuado para aplicaciones que requieren un alto rendimiento y pueden tolerar pausas cortas.

Concurrent Mark and Sweep (CMS) Garbage Collector

Este algoritmo es un tipo más sofisticado de recolección de basura paralela. Utiliza dos hilos: un hilo marcador y un hilo de barrido. El hilo marcador marca todos los objetos que todavía se están utilizando, y el hilo de barrido libera cualquier objeto que no esté marcado. A menudo se utiliza en aplicaciones que requieren baja latencia y no pueden tolerar pausas largas.

G1 Garbage Collector

El recolector de basura Garbage First (G1) es un recolector de basura más nuevo y de baja latencia que está diseñado para funcionar bien con heaps grandes. Divide el heap en regiones y prioriza la recolección de basura de las regiones con más basura. Equilibra el rendimiento y la latencia ajustando dinámicamente el tamaño de las regiones en función de la cantidad de basura en cada región.

Shenandoah Garbage Collector

Este es otro algoritmo de recolección de basura más nuevo que está diseñado para heaps grandes y aplicaciones de ultrabaja latencia. Utiliza una técnica llamada evacuación para mover objetos de una región del heap a otra. Esto puede ayudar a reducir la cantidad de fragmentación en el heap.

Este recolector de basura podría ser adecuado para aplicaciones en tiempo real que requieren baja latencia y no pueden tolerar pausas largas.

Z Garbage Collector

El Z Garbage Collector es un recolector de basura escalable que está diseñado para funcionar bien con heaps grandes y aplicaciones de baja latencia. Utiliza una técnica llamada conteo de regiones para rastrear el número de objetos en cada región del heap. Esto puede ayudar a mejorar el rendimiento de la recolección de basura.

¿Cómo elegir el Recolector de Basura adecuado?

El mejor algoritmo de recolección de basura para tu aplicación dependerá de varios factores, como el tamaño de tu heap, la cantidad de memoria que utiliza tu aplicación y los requisitos de rendimiento de tu aplicación.

Además, debes tener en cuenta las características del recolector de basura, como:

  • Paralelo: Si el recolector de basura utiliza múltiples hilos para escanear el heap.
  • Concurrente: Si el recolector de basura puede ejecutarse de forma concurrente con la aplicación.
  • Rendimiento: La cantidad de trabajo que puede hacer el recolector de basura en un período de tiempo determinado.
  • Latencia: El tiempo que tarda el recolector de basura en completar un ciclo de recolección.
  • Huella: La cantidad de memoria que utiliza el recolector de basura.

La siguiente tabla resume las características de los diferentes recolectores de basura:

Garbage CollectorParaleloConcurrenteRendimientoLatenciaHuella
SerialNoNoBajoAltaPequeña-Moderada
ParallelSíNoAltoModeradaModerada-Grande
CMSSíParcialmenteModeradoModeradaModerada-Grande
G1SíParcialmenteAltoBajaModerada-Grande
ShenandoahSíSíMuy AltoMuy BajaGrande
ZSíSíMuy AltoMuy BajaGrande

Cuando elijas un algoritmo de recolección de basura, es importante considerar los compromisos entre los diferentes algoritmos. Algunos algoritmos, como la recolección de basura Serial, tienen tiempos de pausa bajos, pero pueden tener un rendimiento bajo. Otros algoritmos, como la recolección de basura G1, tienen un alto rendimiento, pero pueden tener tiempos de pausa más largos.

Considerando que tus aplicaciones se ejecutan en la nube, también debes tener en cuenta las limitaciones de recursos de tu entorno. El número de núcleos de CPU, la cantidad de memoria y el ancho de banda de la red pueden afectar el rendimiento del recolector de basura.

En última instancia, la mejor manera de elegir un algoritmo de recolección de basura es experimentar con diferentes algoritmos y ver cuál funciona mejor para tu aplicación.

Conclusión

La recolección de basura es una parte importante de cualquier aplicación cloud-native. Existen varios algoritmos de recolección de basura que se pueden utilizar, cada uno con sus propias ventajas e inconvenientes.

En este artículo, hemos explorado los diferentes recolectores de basura disponibles en la JVM y cómo elegir el más adecuado para tus aplicaciones cloud-native. Al comprender las características de cada recolector de basura y experimentar con diferentes algoritmos, puedes optimizar el rendimiento de tus aplicaciones y asegurarte de que funcionen sin problemas en la nube.

Referencias

Este artículo está inspirado en la charla GC Algorithms for the Cloud de Pratik Patel en el DevBcn 2024. Asegúrate de ver la charla para obtener una visión más profunda del tema.

Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Eclipse JKube 1.17 está disponible!Fabric8 Kubernetes Client 6.13 está disponible!
© 2007 - 2025 Marc Nuri