Primero lee el mensaje, porque heap space, metaspace, buffer directo y GC overhead limit exceeded apuntan a causas muy distintas. Arranca con volcado de heap ante out of memory para capturar el estado en el momento del fallo, luego abre el volcado en un analizador de memoria y mira el árbol de dominadores para ver qué retiene más. Compara volcados a lo largo del tiempo para separar una fuga real de un conjunto de trabajo que simplemente es mayor que el heap.
Por qué lo preguntan los entrevistadores
El entrevistador quiere un método repetible y familiaridad con las herramientas. Distinguir las variantes del error es una señal rápida de credibilidad, igual que conocer a los sospechosos habituales: cachés sin límite, thread locals sobre hilos de pool, fugas de class loader al redesplegar, y consultas que materializan una tabla entera. También comprueban que no vas a subir el heap y darlo por arreglado.
Cómo estructurar tu respuesta
- Lee la variante concreta del error antes de teorizar.
- Captura un volcado de heap automáticamente en el fallo.
- Analiza el tamaño retenido y el árbol de dominadores, no los conteos superficiales.
- Confirma el arreglo con una caché acotada o una consulta en streaming, y luego verifica.
Ejemplo de respuesta
La variante importa. Java heap space significa que los objetos vivos llenan de verdad el heap, metaspace significa que se cargan clases y nunca se liberan, y un error de buffer directo apunta a NIO o a una librería nativa más que a mis objetos. Así que leo eso primero, luego me aseguro de que la JVM corre con volcado de heap ante out of memory y con una ruta en un volumen que sobreviva al reinicio, porque adivinar sin un volcado gasta días. Con el volcado miro el tamaño retenido y no el superficial, y el árbol de dominadores suele señalar al culpable en un par de minutos. Lo que encuentro de verdad es repetitivo: un mapa usado como caché sin desalojo, un thread local puesto en un hilo de pool y nunca limpiado, así que vive tanto como el pool, o un método de repositorio que devuelve todas las filas porque alguien quitó la paginación. También reviso los logs de recolección para ver si el heap subía de forma sostenida o daba picos en peticiones concretas. El arreglo es acotar algo, una caché con tamaño máximo y expiración, o hacer la consulta en streaming, y luego vigilo el conjunto vivo durante una semana para confirmar que queda plano.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo distingues una fuga de un conjunto de trabajo que simplemente es demasiado grande?
- ¿Qué provoca específicamente un error de metaspace?
- ¿Cómo se fugan los thread locals en un hilo de pool?
Más preguntas para Desarrollador Java
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas