Artículos de Tecnología

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

Ellen Pimentel
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.

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

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

//Imagen 3

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

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!

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

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

Para ver su contenido, escribe cat HolaMundo.java.

//Imagen 8

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

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 Captura de pantalla de la carpeta JVM abierta a través del Explorador de Archivos, dentro contiene dos archivos: HolaMundo.class e HolaMundo.java

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 272 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

  • 272 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

Acceso a todos
los cursos

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

Nuevos cursos
cada semana