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.
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:
Abre la carpeta y haz clic derecho dentro de ella, selecciona la opción Nuevo y luego Documento de Texto:
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.
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!");
}
}
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.
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.
Para ver su contenido, escribe cat HolaMundo.java.
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
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.
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.
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.
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
El contenido presentado está repleto de símbolos, mezclados con partes del código y una lectura poco comprensible. Este es el bytecode.
En vim hay una forma para ver los archivos .class en formato hexadecimal, accedamos a él a través del siguiente comando:
:%!xxd
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.
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!
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
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.
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.
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.
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.
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.
¡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.
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
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
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
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
Paga en moneda local en los siguientes países
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
487.37
BOB |
69018.45
CLP |
308114.50
COP |
65.90
USD |
264.97
PEN |
1441.56
MXN |
2978.57
UYU |
Plan Anual |
738.82
BOB |
104627.36
CLP |
467081.02
COP |
99.90
USD |
401.68
PEN |
2185.32
MXN |
4515.32
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana