2 minuto(s) de lectura

Concepto

  • JVM (Java Virtual Machine)

    • Motor en tiempo de ejecución

    • Se utiliza para ejecutar aplicaciones Java

    • Actua como maquina virtual que permite que el código Java se ejecute en cualquier sistema para Java

      • WORA ( White Once Run EveryWhere)

Funcionamiento

  • Cuando el compilador compila un archivo .java genera un archivo .class que contiene byte-code

    • Byte-code

      • Lenguaje intermedio más abstracto que el lenguaje máquina

      • Utilizado como archivo binario el cual contiene un programa ejecutable similar a un módulo objeto

      • Es un archivo binario producido por el compilador cuyo contenido es el código objeto o código máquina

Ejemplo de Byte-code

  • Ejemplo visual simplificado del bytecode de Java
    Compiled from "Example.java"
    public class Example {
    public static void main(java.lang.String[]);
    Code:
        0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
        3: ldc           #3                  // String Hola, mundo!
        5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        8: return
      }
  • Muestra el bytecode para una clase llamada “Example” con un método estático “main” que imprime “Hola, mundo!” en la consola

  • Cada línea de código bytecode comienza con un número y una instrucción

  • Ejemplo

  • “0: getstatic” indica que la instrucción en la posición 0 es “getstatic”

    • Se pueden incluir referencias a constantes o etiquetas como “#2” y “#3” que se resuelven durante la ejecución
  • Esto es un ejemplo simplificado , el bytecode real generado por el compilador de Java más complejo

Ejemplo de Byte-code en formato Hexadecimal

  • Cuando se compila este código el compilador Java genera el siguiente byte-code ( formato hexadecimal )
CA FE BA BE 00 00 00 34 00 1D 0A 00 06 00 0F 09
00 10 00 11 08 00 12 0A 00 13 00 14 07 00 15 07
00 16 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29
56 ...
  • Este byte-code se almacena en un archivo .class y puede ser ejecutado por la JVM

  • Este archivo .class pasa por varios pasos cuando se ejecuta

    • Estos pasos describen la arquitectura de la JVM
  • JVM tiene varios subsistemas como el Java Class Loader el cual es responsable de cargar, enlazar e inicializar el archivo .class

    • Durante la incorporación del cargador de clases , lee el archivo .class que genera los datos binarios y los guarda en el área de métodos

    • Por cada archivo .class el JVM almacena la información como el nombre calificado de la clase cargada y su clase primaria inmediata

      • El archivo .class está relacionado con

        • Class

        • Interface

        • Enum

        • Con información sobre modificadores , variables y métodos

  • Después de cargar el archivo .class la JVM crea un objeto de tipo Class para representar este archivo en la memoria heap

  • Este objeto Class puede ser utilizado por el programador para obtener información de nivel de clase como nombre de clase , nombre principal, métodos e información de variable

    • Tiene un motor de ejecución (Execution Engine) que ejecuta el byte-code

Deja un comentario