JVM (máquina virtual de Java)
El programa que ejecuta el bytecode de Java, Kotlin y otros lenguajes, y que hace que el mismo programa funcione en cualquier sistema.
La JVM lee el bytecode (archivos .class o .jar), gestiona la memoria con un recolector de basura y traduce sobre la marcha el código a instrucciones del procesador.
Para programar se instala un JDK (kit de desarrollo), que incluye la JVM, el compilador javac y otras herramientas. Además de Java, la usan Kotlin, Scala y Groovy.
Un ejemplo
Una aplicación de servidor escrita en Kotlin se empaqueta en un .jar y funciona igual en un servidor Linux que en tu portátil con Windows.
Por qué importa
La JVM es la base sobre la que corren todos los programas Java y también otros lenguajes como Kotlin, Scala o Groovy. Si trabajas con ellos, tarde o temprano verás mensajes de error que mencionan la JVM, como la falta de memoria o una versión incompatible, y saber qué es te ayuda a entenderlos.
Se encarga además de tareas que en otros lenguajes haces a mano, sobre todo la gestión automática de memoria con el recolector de basura. También explica por qué Java mantiene la promesa de «escribe una vez, ejecuta en cualquier parte»: lo que cambia entre sistemas es la JVM instalada, no tu programa.
Confusiones frecuentes
Conviene distinguir tres siglas que se mezclan constantemente: JVM es la máquina virtual que ejecuta el bytecode, JRE es el entorno para ejecutar programas y JDK es el kit de desarrollo, que incluye además el compilador javac y otras herramientas. Para programar necesitas el JDK, mientras que para solo ejecutar una aplicación basta con el entorno de ejecución. Tampoco es una única pieza de software: existen varias implementaciones, como HotSpot, la más habitual.
Preguntas frecuentes
¿Cómo sé qué versión de Java tengo?
Ejecuta java -version en la terminal. Para el compilador, javac -version.
¿Qué hago si aparece `OutOfMemoryError`?
La JVM se ha quedado sin memoria. Puedes ampliar el límite con la opción -Xmx, pero primero conviene comprobar si el programa retiene objetos innecesariamente.