El recolector de basura primero ( G1 ) es un algoritmo de recolección de basura introducido en la máquina virtual Java (JVM) Oracle HotSpot 6 y compatible desde la actualización 4 de la versión 7. Se planeó para reemplazar al recolector de barrido de marcas concurrente (CMS) en la JVM 7 y se convirtió en predeterminado en Java 9. [1]
El recolector de basura primero (G1) es un recolector de basura de estilo servidor , destinado a multiprocesadores con memorias grandes , que cumple un objetivo de tiempo real suave con alta probabilidad, al mismo tiempo que logra un alto rendimiento . [2] G1 recopila preferentemente regiones con la menor cantidad de datos en vivo, o "primero la basura". [3] G1 es el reemplazo a largo plazo de CMS. Las operaciones de montón completo, como el marcado global, se realizan simultáneamente con los subprocesos de la aplicación , para evitar interrupciones proporcionales al tamaño del montón o de los datos en vivo. El marcado simultáneo proporciona integridad de la recopilación e identifica regiones listas para la recuperación a través de la evacuación de compactación. Esta evacuación se realiza en paralelo en multiprocesadores, para disminuir los tiempos de pausa y aumentar el rendimiento.
G1 se introdujo por primera vez como una opción experimental en Java SE 6 Update 14, [4] donde se puede habilitar con los siguientes dos parámetros de línea de comandos: -XX:+UnlockExperimentalVMOptions
y -XX:+UseG1GC
Con JDK 7, se planeó que G1 reemplazara a CMS en la JVM Hotspot. Hay dos diferencias principales entre CMS y G1. La primera es que G1 es un recolector compactador . [5] G1 compacta lo suficiente como para evitar por completo el uso de listas libres de grano fino para la asignación, lo que simplifica considerablemente partes del recolector y elimina en su mayoría los posibles problemas de fragmentación . Además de compactar, G1 ofrece pausas de recolección de basura más predecibles que el recolector CMS y permite a los usuarios establecer sus objetivos de pausa deseados.
En Java 9, G1 se convirtió en el recolector de basura predeterminado, [6] [1] a pesar de que Google propuso en contra el conocido CMS como estándar, afirmando que el CMS modificado que utiliza funciona mejor que G1. [7] Desde entonces, Oracle ha mejorado enormemente el rendimiento, la latencia y el consumo de memoria de G1 . [8]
Para garantizar un comportamiento en tiempo real incluso con recolección de basura, se necesita un recolector de basura en tiempo real como los que vienen con Java RTS de Sun [9] o WebSphere RT de IBM . [10]