← SEARCHABLE ARCHIVE
Java · 2026-08-10

Java de los fundamentos al dominio — Lección 9

Comprender las funciones de la memoria JVM, GC y JIT

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

El código Java se ejecuta sobre la JVM y maneja la carga de clases, la administración de la memoria y la optimización de la ejecución con la ayuda del tiempo de ejecución. En lugar de memorizar la terminología interna, es importante comprender cómo este proceso afecta el rendimiento y los errores.

Carga de clases y código de bytes

Source.java
   ↓ compiler
Source.class
   ↓ class loader
JVM execution

El cargador de clases encuentra la clase requerida y verifica que esté en un formato que la JVM pueda usar. Si la ruta de clase o las dependencias no coinciden, es posible que la clase no se encuentre durante la ejecución, incluso si la compilación se realiza correctamente.

apilar y amontonar

La información de llamada al método y las variables locales se gestionan en el marco de llamada de cada hilo. Los objetos a los que se puede hacer referencia desde varios lugares se crean en el área del montón administrado.

void update() {
    int damage = 10;
    Monster monster = new Monster();
    monster.takeDamage(damage);
}

el daño es un valor de tipo primitivo y la variable monstruo es una referencia de objeto. La ubicación y optimización reales están determinadas por la implementación de JVM, por lo que no todas las ubicaciones de los objetos deben juzgarse mediante fórmulas simples.

Garbage Collector

Los objetos a los que ya no se puede acceder pasan a estar sujetos a la recopilación de GC. Tener GC no significa que nunca habrá pérdidas de memoria.

Si una colección estática o un detector de eventos continúa haciendo referencia a un objeto no utilizado, sigue siendo accesible. Los recursos externos, como archivos y sockets, deben cerrarse directamente sin esperar a GC.

optimización JIT

La JVM puede optimizar el código observando el código utilizado con frecuencia durante la ejecución y compilándolo en lenguaje de máquina. Juzgar el rendimiento general a partir de un breve tiempo de ejecución puede confundir la preparación y la optimización.

Para problemas de rendimiento, la cuota, el uso de la CPU y las esperas de bloqueo se deben medir utilizando un generador de perfiles antes de cambiar el tamaño del montón o las opciones de GC. El conocimiento de JVM es la base para interpretar las causas de los resultados de las mediciones, no para una microoptimización especulativa.