La situación de Java en Minecraft
Minecraft requiere versiones distintas de Java según su propia versión: 1.16 y anteriores Java 8, 1.17 Java 16, 1.18 a 1.20.4 Java 17, 1.20.5+ Java 21. Los mods se compilan contra una versión Java concreta. Un mod construido para Java 17 no corre en una JVM Java 8 (bytecode demasiado nuevo). En el sentido inverso funciona técnicamente a nivel de bytecode, pero en la práctica los mod loaders viejos de Minecraft (Forge 1.12.2, etc.) no soportan versiones modernas de Java, así que cada versión MC acaba queriendo una Java a juego. GDLauncher lo resuelve con dos cosas: instalaciones Java managed (puede bajar la Java correcta por versión Minecraft automáticamente) y overrides por instancia (puedes forzar una Java concreta para una instancia).
Managed vs Custom Java
Managed: GDLauncher descarga e instala la Java él mismo, de las builds Zulu de Azul. Vive dentro del Runtime Path bajo managed_javas/. Se borra con el icono papelera cuando quieras liberar disco. Custom: apuntas a una Java ya instalada en tu sistema (Adoptium Temurin, Oracle JDK, GraalVM, etc.). GDLauncher solo valida el path; no gestiona la instalación. Útil si ya tienes un JDK tuneado que quieres usar. Las Java detectadas del sistema (las que GDLauncher encuentra sin que hagas nada) no se pueden borrar desde el launcher porque GDLauncher no es propietario.
Perfiles
Un perfil es una regla con nombre 'usa esta Java cuando algo pida la runtime Foo'. Los perfiles de sistema corresponden a los niveles de runtime Java de Mojang (Java 8 → Legacy, Java 16 → Alpha, Java 17 → Beta/Gamma, Java 21 → Delta, Java 25 → Epsilon). Con auto-gestión activa, el launcher elige la Java adecuada para cada nivel; desactivada, las asignas tú. Los perfiles custom permiten dar un nombre a un path concreto y referenciarlo desde los overrides de instancia. La mayoría no necesita perfiles custom, los perfiles de sistema + auto-gestión cubren el caso común.
Override por instancia
En Instance Settings, la sección Java Path/Profile tiene un toggle. Off (default): la instancia usa la Java que el launcher elija basándose en la versión Minecraft (vía perfiles de sistema). On: especificas o un Path (un archivo literal) o un Profile (un perfil con nombre). Cuándo quieres un override: el modpack dice explícitamente 'debe correr en Java X.Y.Z' y quieres pinnearlo; estás probando una JVM (GraalVM, Liberica NIK) y la quieres en una instancia sin tocar el default; tienes varias instalaciones de Java 17 (Adoptium, Microsoft, etc.) y quieres una concreta.
Verificar qué Java se usó de verdad
Tras lanzar, clic derecho en la instancia → View Logs. El log del launcher lista la ruta completa del ejecutable Java al que llamó. Compáralo con tu override esperado.
Errores de Java comunes
UnsupportedClassVersionError: el mod o servidor fue compilado para una Java más nueva que la que corre. El error incluye un número 'class file version' (61.0 = Java 17, 65.0 = Java 21). Cambia a una Java más nueva vía perfil u override. 'Could not reserve enough space for object heap': se está usando una Java 32-bit (límite de ~1,5 GB de heap en Windows), o pides más memoria contigua de la que el sistema puede dar. Confirma que has instalado un JDK 64-bit y que es ese al que apunta el override; si sigue fallando, baja el slider de RAM. 'Could not find or load main class': normalmente una instalación incompleta o rota del mod loader (Forge, NeoForge, Fabric), o faltan libraries o ficheros jvm args, no es problema de Java en sí. Reinstala el loader desde los ajustes de instancia, o recrea la instancia. Si persiste, prueba con otra Java en el override.