Durante más de siete años, los famosos "Aikar's Flags" basados en el recolector G1GC han sido el estándar indiscutible para correr Minecraft. No obstante, con la llegada de Java 21 LTS y Java 25, Oracle y la comunidad de OpenJDK introdujeron ZGC Generacional (Generational ZGC), prometiendo pausas de recolección de basura menores a un milisegundo. Analizamos si realmente vale la pena en partidas locales y servidores.
1. La Batalla de los Recolectores: G1GC vs ZGC
- G1GC (Garbage-First): Divide la memoria en regiones y busca recolectar las áreas con más basura. Tiene un rendimiento excelente en throughput (FPS promedio altos), pero sus pausas de pausa pueden rondar entre 20 y 80 milisegundos.
- ZGC Generacional: Ejecuta casi toda la recolección de forma concurrente en hilos secundarios mientras el juego sigue corriendo. Reduce las pausas a menos de 1 milisegundo, eliminando por completo los microtirones de frametime.
2. Cuándo Usar ZGC Generacional
ZGC Generacional solo está disponible a partir de Java 21 y requiere al menos 4 núcleos de CPU libres para sus hilos concurrentes. Si cumples estos requisitos, es el mejor recolector para eliminar los tirones en Minecraft con shaders.
# Argumentos de lanzamiento recomendados para ZGC Generacional en Java 21+:
-XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysPreTouch -XX:+UseNUMA -Xms6G -Xmx6G
3. Cuándo Quedarse con G1GC
Si tu procesador es de 2 o 4 núcleos (como un Intel Core i3 o laptops antiguas) o utilizas Java 17 o Java 8, G1GC sigue siendo superior porque ZGC consume un 15% más de uso de CPU en hilos de fondo.