Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Programación

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

ELLEN PRADO PIMENTEL
ELLEN PRADO PIMENTEL
26/12/2022

Compartir

Mira este artículo:
  1. Paso a paso con la JVM

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ículo Anterior
Comandos básicos para utilizar Vim
Siguiente Artículo
IntelliJ IDEA para principiantes

Ver otros artículos sobre Programación

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast