Artículos de Tecnología

Paso a paso con la Máquina Virtual de Java (JVM)

Ellen Pimentel
Ilustración de una taza de café de color blanca, con una cuchara pequeña al lado. En su interior contiene café con un corazón escrito JVM, y encima de la taza hay humo." loading="lazy

Paso a paso con la JVM

El ecosistema de la Java es una sopa de letras llena de siglas, y la JVM (Java Virtual Machine) es una de ellas. Además de ser la base de la plataforma Java, también fue una de las razones para la popularización del lenguaje.F

Y, ¿cómo funciona exactamente? Vamos a averiguar paso a paso.

Tip: Para realizar la actividad no basta con tener instalado Java, es necesario tener configuradas las variables de entorno como el JAVA_HOME, el PATH, y el CLASS_PATH.

¡Hora de practicar!

Hay varios IDEs (Eclipse, IntelliJ IDEA, NetBeans) y Editores de Código (VSCode) que podemos usar para crear un programa Java. Incluso es posible a través de un simple bloc de notas y será él que usaremos para la demostración.

Vamos a crear una carpeta JVM en nuestra computadora:

//Imagen 2" loading="lazy

Abre la carpeta y haz clic derecho dentro de ella, selecciona la opción Nuevo y luego Documento de Texto:

//Imagen 3" loading="lazy

Nombra el archivo como HolaMundo, es importante cambiar también la extensión .txt a .java. De esta forma, el nombre del archivo será HolaMundo.java. Esta es la llamada fase de edición.

//Imagen 4" loading="lazy

Haz doble clic en el archivo para abrirlo. Ahora, crearemos el clásico "¡Hola mundo!" con la clase y el método principal. Es importante que el nombre del archivo sea el mismo que el de la clase.

public class HolaMundo {  
      public static void main(String[] args) {    
          System. out. println("¡Hola, Mundo!");   
    } 
}
Captura de pantalla con la carpeta JVM abierta. En su interior contiene el archivo HolaMundo.java. El archivo está abierto y contiene el fragmento de código Java con la impresión de ¡Hola, Mundo!" loading="lazy

Guarda el código con Ctrl + S, o haciendo clic en Archivo, Guardar.

A partir de ahora trabajaremos con el terminal Git Bash. Haz clic derecho en un espacio en blanco dentro de la carpeta y seleccione Git Bash Here.

//Imagen 6" loading="lazy

Con el terminal abierta, usaremos el comando ls para demostrar que tenemos el archivo que acabamos de crear en la carpeta. Después del comando, usa el botón Enter.

//Imagen 7" loading="lazy

Para ver su contenido, escribe cat HolaMundo.java.

//Imagen 8" loading="lazy

El proceso de compilación es la transformación del código fuente en código ejecutable, en este caso se transforma en bytecode, un archivo intermedio. Para ello utilizaremos el compilador javac (java compiler). El comando también debe ir acompañado del nombre del archivo:

javac HolaMundo.java

//Imagen 9" loading="lazy

Si no hay errores, significa que el código ha sido compilado. Al usar el comando ls nuevamente, ahora tendremos dos archivos, el código fuente y el bytecode.

//Imagen 10" loading="lazy
Captura de pantalla de la carpeta JVM abierta a través del Explorador de Archivos, dentro contiene dos archivos: HolaMundo.class e HolaMundo.java" loading="lazy

Para ejecutar el programa, simplemente escribe java junto con el nombre de la clase:

java HolaMundo

El comando java invocará la JVM, que interpretará los bytecodes generados a través del archivo HolaMundo.class para la computadora.

//Imagen 12" loading="lazy

Un poco más allá…

Vale, hicimos el proceso de edición, compilación e interpretación. Ahora veamos parte del detrás de escena de este proceso.

Limpiemos nuestro terminal con el comando clear.

//Imagen 13" loading="lazy

Para visualizar el contenido del archivo .class es necesario activar el editor vim junto con el nombre del archivo con esta extensión:

vim HolaMundo.class

//Imagen 14" loading="lazy

El contenido presentado está repleto de símbolos, mezclados con partes del código y una lectura poco comprensible. Este es el bytecode.

//Imagen 15" loading="lazy

En vim hay una forma para ver los archivos .class en formato hexadecimal, accedamos a él a través del siguiente comando:

:%!xxd

//Imagen 16" loading="lazy

Tras pulsar Enter tenemos acceso a la visualización de los bytecodes en formato hexadecimal.

En primer lugar tenemos el código café babe, el número mágico de java, que identifica que se trata de un archivo de tipo java. Al lado derecho en la parte superior, muestra el método especial init. Cada doble hexadecimal que tiene un byte significa un comando.

//Imagen 17" loading="lazy

Esta lectura tampoco es sencilla, pero existe un formato intermedio que facilita la comprensión del proceso interno de la JVM.

Para salir de esta visualización, usaremos el comando :q!

//Imagen 18" loading="lazy

En el JDK existe una herramienta de utilidad para acceder a este código intermedio, y debe contener el nombre de la clase:

javap -c HolaMundo

//Imagen 19" loading="lazy

Ahora tenemos el código con las instrucciones de la JVM. Oracle tiene en su documentación la explicación de los comandos y códigos de operación.

//Imagen 20" loading="lazy

En la primera parte tenemos la indicación del archivo fuente que generó la clase (compiled from “HolaMundo.java), la carga de la referencia de la variable local (aload_0), el método especial init con el constructor por defecto (invokespecial) que regresa vacío.

//Imagen 21" loading="lazy

En la segunda parte, presenta el método principal con el campo estático de la clase (getstatic), la inserción del elemento en el grupo de constantes (ldc), una instancia del método y su tipo (invokevirtual). El tipo dice que este método toma una matriz String primitiva como parámetro y devuelve Void.

//Imagen 22" loading="lazy

Por supuesto, no es necesario que conozcas todos estos comandos, pero es una curiosidad que te ayudará a diario y comprenderás mejor el funcionamiento de la JVM.

Conclusión

Esta es una breve introducción de cómo funciona la JVM, seguramente hay mucho más por explorar. Más que aprender un lenguaje es importante entender cómo este funciona y cómo podemos aplicar estos conocimientos para mejorar el desempeño de nuestros programas.

img-autor" loading="lazy

Ellen Pimentel

¡Hola, soy Ellen! Formo parte del equipo de Instructores de Alura Latam, me encanta aprender, y además del área de programación, me gusta estudiar sobre procesos y negocios.

Artículos de Tecnología

En Alura encontrarás variados cursos sobre . ¡Comienza ahora!

Precios en:
USD
  • USD
  • BOB
  • CLP
  • COP
  • USD
  • PEN
  • MXN
  • UYU

Semestral

  • 274 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 6 meses
US$ 65.90
un solo pago de US$ 65.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Anual

  • 274 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 12 meses
US$ 99.90
un solo pago de US$ 99.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Bootcamp Back End

  • 274 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a la Formación - Aprende Java con Orientación a Objetos - Bootcamp Back End Java

    Aprende a programar en uno de los principales lenguajes de programación para el back-end en el mercado: Java. En este módulo, tendrás la oportunidad de conocer las principales bibliotecas de Java y dominar el paradigma de la Orientación a Objetos.

  • Acceso a todo el contenido de la plataforma por 6 meses
US$ 149.90
un solo pago de US$ 149.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Acceso a todos
los cursos

Estudia las 24 horas,
dónde y cuándo quieras

Nuevos cursos
cada semana