Proceso de programación. Estructura de una Máquina Virtual Java (JVM) Problema. Lenguajes tradicionales

Documentos relacionados
Tema 1. Introducción a JAVA

Introducción a Java LSUB. 15 de enero de 2015 GSYC

INF 473 Desarrollo de Aplicaciones en

INTRODUCCIÓN A JAVA. Índice

1. Aplicaciones del J2SE SDK1.4.2 de Sun.

Seminario de Java. Contenido

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Compilación y ejecución de programas en Java.

Programador en Plataforma Java y XML

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

picojava TM Características

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

servicios. El API es definido al nivel de código fuente y proporciona el nivel de

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Tema 2: La Tecnología Java

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

Introducción al lenguaje de programación java

Qué es Java? Introducción a Java. Lenguajes Orientados a Objetos. Qué es Java? Historia de Java. Objetivos de Java

Procesadores de lenguaje Tema 1: Introducción a los compiladores

Java Inicial (20 horas)

Java en 2 horas. Rodrigo Santamaría


Entre los más conocidos editores con interfaz de desarrollo tenemos:

Modelo de Objetos Distribuidos

.NET y J2EE VALORACIÓN Y COMPARACIÓN DE LOS ELEMENTOS DE LAS DOS PLATAFORMAS. Definiciones...2 C# y Java...3 Similitudes...4 Ventajas...

TEMA 2. Agenda. Fundamentos de JAVA

Repaso desarrollo de software Parte #1. Jorge Iván Meza Martínez

Java y Eclipse. Lenguajes y Entornos de Programación Libre

Java Básico. Empaquetamiento y despliegue de aplicaciones. Copyright

Curso de Java POO: Programación orientada a objetos

GENERACIÓN DE CÓDIGO

Prácticas: Introducción a la programación en Java. Informática (1º Ingeniería Civil) Curso 2011/2012

Repaso de las características más importantes de la programación Java y su adaptación a Android

Índice. Qué es Java? La plataforma Java 2 La Máquina Virtual de Java Características principales Qué ventajas tengo como desarrollador?

Java. Mtro. Manuel Suárez Gutiérrez

Introducción a la Programación en Java. Page 1

Java Básico. Introducción a Java. Copyright

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos

Plataforma desarrollo Java Formación elearning tutorizada en castellano. Fabricante: Java Grupo: Desarrollo Subgrupo: Master Java

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD

Programación para sistemas en red IV. Conceptos básicos II

Entorno de Ejecución del Procesador Intel Pentium

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Módulo 2. Inicio con Java

8. Sentencia return y métodos

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

El lenguaje de programación Java

Programación en Java. Temario. David Contreras Bárcena

Introducción al lenguaje Java

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Java es el lenguaje de programación que

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Programación en Java. Hola Jesus. Primera clase del curso de Java

>> Programación de dispositivos móviles.

Tema 1. Java: Conceptos generales

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

Proyecto MONO. Juantomás García. 1. Introducción. GNOME Hispano

JAVA EE 5. Arquitectura, conceptos y ejemplos.

PROGRAMACIÓN ORIENTADA A OBJETOS

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

CAPITULO 3 VRML-JAVA-WWW

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

CAPITULO IV CONCLUSIONES Y RECOMENDACIONES

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador.

Una introducción al compilador C de GNU

Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y

9. Objetos y clases Clases

19. Packages o paquetes

Conceptos fundamentales de la POO. Fundamentos de la Programación Orientada a Objetos Objetos y Clases

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Arquitectura Von Neumann

El lenguaje de Programación C. Fernando J. Pereda

Processadors de Llenguatge II. Compiladores

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

INTRODUCCIÓN A LA PROGRAMACIÓN DE DISPOSITIVOS MÓVILES

Programación Interactiva Introducción a Java. Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

J2ME ENTORNO DE EJECUCIÓN. Un entorno de ejecución determinado de J2ME se compone entonces de una selección de:

Java y JVM: programación concurrente

TECNOLOGÍAS DE DESARROLLO: JAVA

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

Hola Mundo en Java 1.5 en Windows XP - DrJava

Programación I: Funciones y módulos

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Modulo 1 El lenguaje Java

Preliminares. Tipos de variables y Expresiones

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA

Ingeniería Superior de Informática. Curso 3º. Sistemas Operativos. Examen Final. TEORÍA. 31 de Enero de 2005

Introducción a ZEUS. Introducción. Curso Doctorado Sistemas Multi-agente. Zeus es una herramienta de desarrollo de SMA.

Figura 4.1 Clasificación de los lenguajes de bases de datos


RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

Tema 2: Implementación del núcleo de un Sistema Operativo

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Introducción a Java. Diseño y Programación Orientados a Objetos 1

Estructuras de datos: Proyecto 2

Algunas características de los lenguajes de programación orientados a objetos son:

Transcripción:

Estructura de una Máquina Virtual Java (JVM) Autor: Pedro Pablo Garrido Abenza pgarrido@umh.es Proceso de programación Primero se escribe el programa en un lenguaje de alto nivel (código fuente). Este código se traduce a instrucciones que una máquina específica puede ejecutar (código ejecutable). Para ello se han inventado varias estrategias: Ensambladores (ASM Código nativo) Compiladores (SRC Código nativo) Intérpretes Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Problema Durante mucho tiempo un problema común ha sido la necesidad de poder ejecutar un mismo programa en diferentes plataformas (sistemas operativos, hardware, etc.). Hola.c Hola.c Lenguajes tradicionales Compilación Compilación (bcc) (bcc) Hola.obj Hola.obj Enlazado Enlazado (link) (link) C API API Hola.exe Hola.exe Compilación Compilación (gcc) (gcc) Hola.o Hola.o Enlazado Enlazado (ld) (ld) Hola Hola C API API Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

Java - Una nueva idea La tecnología Java es: Un lenguaje de programación Un conjunto plataformas especializadas JEE JSE JME Java - Una nueva idea Esto se consiguió gracias al uso de un código ermedio: bytecodes. En tiempo de compilación se generan bytecodes independientes de la plataforma. Java fué diseñado específicamente para ser: Write Once, Run Anywhere En tiempo de ejecución se ejecutan (erpretan) los bytecodes utilizando un programa llamado Java Virtual Machine (JVM) sobre una plataforma específica. Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Java Java API API Tecnología Java Hola.java Hola.java JVM JVM (java) (java) Compilación (javac) (javac) Hola. Hola. bytecodes bytecodes (Código independiente de la plataforma:.) JVM JVM (java) (java) JVM JVM (java) (java) Tecnología Java Ventajas: Multiplataforma Código compacto: bytecodes Aplicaciones convencionales y applets Paradigma POO Inconvenientes: Velocidad de ejecución lenta Plataforma Plataforma Plataforma Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

Tecnología Java Ventajas: Multiplataforma Código compacto: bytecodes Aplicaciones convencionales y applets Paradigma POO Inconvenientes: Velocidad de ejecución lenta (erpretado) Tecnología Java Comparando Java con los lenguajes tradicionales: Programas (código nativo) Sistema Operativo Hardware Lenguajes tradicionales Prog. Java (bytecodes) Máquina Virtual (bytecodes > código nativo) Sistema Operativo Hardware Tecnología Java Clases Java (bytecodes) Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) 0 Por qué estudiar la JVM? Comprender aspectos sobre la portabilidad de los programas Java. Distinguir el funcionamiento de un érprete frente al de un compilador. If you don't understand erpreters, you can still write programs; you can even be a competent programmer. But you can't be a master (Friedman). Implementar nuestra propia JVM. Analizar la salida de los compiladores Java para optimizarlos. Implementaciones JVM Intérpretes desarrollados: Sun Microsystems Microsoft, Borland, IBM Otros: Kaffe, LaTTe, Kissme, SableVM, Wonka,...,. Todos deben ser compatibles: The Java Virtual Machine Specification Otras especificaciones (JNI,...). Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

Implementaciones JVM Programas Java JVM Librería clases Java JVM - JNI (awt.dll, net.dll,...) Java Language Specification Java API Specification JVM Specification JNI Specification Estructura de la JVM Una JVM contiene básicamente:. Zona de memoria dinámica (heap). Zona de métodos. Hilos de ejecución (threads) Memoria dinámica (Heap) Sistema Operativo Hardware Zona de métodos Hilos (Threads) La torre de especificaciones Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Objeto Amarillo aun vigente Objeto Amarillo eliminado Estructura de la JVM /. Zona de memoria dinámica (heap): Heap Heap Es una zona de memoria reservada por la JVM para almacenar las instancias de las clases (objetos) que se crean. Periódicamente se ejecuta el algoritmo de Garbage Collection (GC) para liberar memoria ocupada por objetos eliminados, y compactar huecos libres. GC Heap Heap Estructura de la JVM /. Zona de métodos: Es una zona de memoria utilizada para almacenar el código de los métodos de todas las clases Java cargadas (bytecodes). Zona compartida por todos los hilos. Zona Zona métodos métodos factorial pr exit get get ; ; : : ldc ldc ; ; : : invokevirtual invokevirtual ; ; : : Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

SP Frame Poer Estructura de la JVM /. Hilos de ejecución (threads): Sólo uno estará activo en un instante. Cada hilo contiene: ID: un identificador único. Stack JVM: pila de llamadas a métodos Cada elemento de la pila es un marco (Frame). Frame Poer (): puntero que señala al marco de Hilo Hilo (Thread) (Thread) ID: la cima, el marco actual. Marco Marco Marco Marco 0 Stack JVM Marco actual () Estructura de una Java Virtual Machine (JVM) Estructura de la JVM /. Elementos de un marco (Frame): Zona Zona para para las las variables locales; locales; las las primeras siempre siempre son son los los argumentos recibidos por por el el método. método. Args. Vars. locales 0. args 0. args....... Código Código del del método, que que estará estará ejecutando la la instrucción indicada por por el el Los Los opcodes opcodesla la utilizan utilizan para para extraer extraer sus sus parámetros (pop) (pop) y dejar dejar los los resultados (push). (push). Pila de operandos Marco llamador Puntero Puntero al al marco marco que que le le ha ha llamado, para para retornarle valores. valores. Estructura de una Java Virtual Machine (JVM) Invocaciones: args/ Pe Pe n n sumanat sumanat (, (, ); ); private private sumanat sumanat ( ( ini, ini, fin) fin) i, i, suma0; suma0; for for (iini; (iini; i<fin; i<fin; i++) i++) suma+i; suma+i; (suma); (suma); Invocaciones: args/ Frame Poer Frame 0 () Args. Vars. locales 0. args... 0. args.... n? nsumanat(,); Null Frame Poer Frame 0 () Args. Vars. locales 0. args... 0. args.... n? nsumanat(,); Null Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) 0

Invocaciones: args/ Args. 0. ini. fin Vars. locales 0. ini. fin. i?. suma 0 private sumanat ( ini, fin) i, suma0; for (iini; i<fin; i++) suma+i; (suma); Invocaciones: args/ Args. 0. ini. fin Vars. locales 0. ini. fin. i. suma private sumanat ( ini, fin) i, suma0; for (iini; i<fin; i++) suma+i; (suma); Frame Poer Frame (sumanat) Frame 0 () Args. Vars. locales 0. args... 0. args.... n? nsumanat(,); Null Frame Poer Frame (sumanat) Frame 0 () Args. Vars. locales 0. args... 0. args.... n? nsumanat(,); Null Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Invocaciones: args/ Args. 0. ini. fin Vars. locales 0. ini. fin. i. suma private sumanat ( ini, fin) i, suma0; for (iini; i<fin; i++) suma+i; (suma); Invocaciones: args/ Frame Poer Frame (sumanat) Args. Vars. locales 0. args... 0. args.... n? Frame 0 () Null nsumanat(,); Estructura de una Java Virtual Machine (JVM) Frame Poer Frame 0 () Args. 0. args... Vars. locales 0. args.... n Null nsumanat(,); Estructura de una Java Virtual Machine (JVM)

Clases - Procesado Fases para el procesado de clases Java antes de su ejecución: Carga Enlace.a.b.c Verificación Preparación Resolución Inicialización Tareas: Clases - Fase de carga Búsqueda y carga de clases Java Almacenamiento de clases Java: Archivos. empaquetados en los archivos.zip o.jar de Java: C:\Archivos de programa\java\jdk..0\jre\lib\rt.jar C:\WINDOWS\java\Packages\*.zip Archivos. en cualquier directorio especificado en la variable CLASSPATH. Archivos.ZIP o.jar especificados en la variable CLASSPATH. Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Número mágico: 0xCAFE BABE Versión: 0x0000 00 00.0.0 (JSDK..0) Clases - Fase de carga Los archivos. son archivos binarios: Clases - Fase de carga Estructura de una clase (.): Número mágico: 0xCAFEBABE Versión Java:.0 JSDK. Visibilidad: pública, privada, etc. Nombre de la superclase zona de antes numeradas (números, nombres de atributos y métodos, Strings, ), utilizadas por los siguientes. Fields: lista de campos. s: lista de métodos. Interfaces: lista de erfaces implementadas. Attributes: información adicional. Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

Clases - Fase de carga Lista de clases cargadas: cubetas Lista enlazada: A K Tabla Hash de dispersión abierta: 0 D A K D Q Q Función dispersión: Σ (ASCII(nombre)) % cubetas Ejemplo: A ( % ) Clases - Fase de enlace Se divide en subfases: Verificación: formato correcto Preparación: creación de datos de clase Resolución de referencias simbólicas: Estática: se resuelven todas al principio (de forma recursiva). Perezosa: se resuelven sólo cuando son realmente utilizadas. Resolución Estática Perezosa Sun Microsoft Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) 0 Tareas: Clases - Inicialización Ejecución de los ructores de clase (Métodos <clinit>). Una vez procesada una clase completamente, ya será posible... Crear instancias de esa clase. Ejecutar los métodos que incluye. Repertorio de instrucciones Cada MV tiene su propio juego de instrucciones, al igual que cualquier CPU. Tradicionalmente hay dos tipos de juegos de instrucciones: Basados en pila: las instrucciones toman los operandos de la pila de operandos Máquinas Virtuales (más sencillo). Basados en registros: los operandos se toman de unos "registros" CPUs. La JVM está basada en pila (CISC) Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

Repertorio de instrucciones La JVM tiene 00 opcodes: 00..FF A cada opcode se le asocia una palabra fácil de recordar: mnemónico: Repertorio de instrucciones Los opcodes se pueden agrupar por categorías: Carga y almacenamiento (Load & Store), Operaciones aritméticas, Conversiones de tipo, Creación y gestión de objetos, Gestión de pila de operandos, Control de flujo de ejecución, Invocación a métodos y retorno. Código de los métodos: bytecodes. Un bytecode a de: Un código de operación (opcode): byte Seguido de los argumentos (opcionales): 0.. bytes opcode [arg] [arg] [arg] [arg] [arg] Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) SP Stack Poer Repertorio de instrucciones Ejemplos Load y Store: La familia LOAD apila el valor de una variable local en la cima de la pila de operandos. La familia STORE desapila el valor de la cima de la pila y lo almacena en una variable local. Args. 0. ini. fin i ini; Se compila como... Vars. locales 0. ini iload_0. fin istore_. i? iload_0 istore_ Null SP Stack Poer Repertorio de instrucciones Ejemplos - varios: opcode (0xB) (0x0) (0x) 0 (0x0) mnemónico bipush ldc iadd Pila de operandos Operación iza la ejecución del método actual, retornando al método llamador. Apila en la pila de operandos el valor entero. Apila en la pila de operandos el valor de la ante nº de la zona de antes (Pool). Sumar dos enteros. Los pasos son:. Extraer operandos de la pila (pop). Realizar la operación (suma). Apilar el resultado en la pila (push) SP SP SP Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

Repertorio de instrucciones Para obtener el código de un método de una clase hay varias utilidades: javap (Java SDK): javap -c -verbose HelloWorld Jasper (& Jasmin): java -jar Jasper.jar HelloWorld jlib Bytecode Viewer Class Viewer for Java Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Ejemplo HelloWorld.java HelloWorld.java HelloWorld HelloWorld System.out.prln System.out.prln ("Hello ("Hello World!!"); World!!"); C:\> javap -c verbose HelloWorld C:\> javap -c verbose HelloWorld Compiled from HelloWorld.java Compiled from HelloWorld.java HelloWorld extends Object HelloWorld extends Object HelloWorld(); HelloWorld(); aload_0 aload_0 : invokespecial : invokespecial : : get ; get ; : ldc ; : ldc ; : invokevirtual ; : invokevirtual ; : :.;.; Field Field.;.; String String ; ;.0;.0; ; ; ; ; 0 0 ; ; HelloWorld.java; HelloWorld.java; :; :; ; ; :; :; Hello Hello World!!; World!!; ; ; 0 0 :; :; HelloWorld; HelloWorld; java/lang/system; java/lang/system; out; out; Ljava/io/PrStream;; Ljava/io/PrStream;; java/io/prstream; java/io/prstream; prln; prln; (Ljava/lang/String;)V; (Ljava/lang/String;)V; Estructura de una Java Virtual Machine (JVM) 0

Ejemplo : control de flujo Par.java Par.java.;.; Par Par.;.; ; ; ; ; boolean boolean b b espar(); espar(); boolean boolean espar espar ; ; ( ( n) n) 0 0 if if ((n ((n % % ) ) 0) 0) espar; espar; (true); (true); (I)Z; (I)Z; else else (false); (false); Par.java; Par.java; :; :; :; :; Par; Par; Ejemplo : control de flujo C:\> C:\> javap javap -c -c verbose verbose Par Par Compiled Compiled from from Par.java boolean boolean espar(); espar(); Par.java Par Par extends extends Object Object Stack,Locals,Args_size Stack,Locals,Args_size Par(); Par(); iload_0 iload_0 : Stack, Stack, Locals, Locals, Args_size : i_ i_ Args_size aload_0 : aload_0 : irem irem : : invokespecial invokespecial ; ; : : ifne ifne java/lang/object."<init>":()v java/lang/object."<init>":()v : : : : i_ i_ : : i i : : i_0 i_0 : : i i Stack, Stack, Locals, Locals, Args_size Args_size bipush bipush : : invoke invoke ; ; espar:(i)z espar:(i)z : : istore_ istore_ : : Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM) Ejemplo : factorial iterativo FactIter.java FactIter.java.;.; FactIter FactIter.;.; ; ; ; ; n n fact(); fact(); fact( fact( n) n) res; res; for for (res; (res; (n>); (n>); n--) n--) ; ; res res * * n; n; 0 0 fact; fact; (res); (res); (I)I; (I)I; FactIter.java; FactIter.java; :; :; :; :; FactIter; FactIter; Ejemplo : factorial iterativo C:\> C:\> javap javap -c -c verbose verbose FactIter FactIter Compiled Compiled from from FactIter.java fact fact (); (); FactIter.java FactIter FactIter extends extends Object Object Stack,Locals,Args_size FactIter(); FactIter(); i_ i_ : : istore_ istore_ Stack, Stack, Locals, Locals, Args_size Args_size : : iload_0 iload_0 aload_0 aload_0 : : i_ i_ : : invokespecial invokespecial ; ; : java/lang/object."<init>":()v : if_icmplt if_icmplt java/lang/object."<init>":()v : : : : iload_ iload_ : : iload_0 iload_0 : : imul imul istore_ istore_ : : iinc iinc 0, 0, - - Stack, Stack, Locals, Locals, Args_size Args_size : : goto goto i_ i_ : : : invoke invoke ; : iload_ iload_ ; : fact:(i)i : i i fact:(i)i : : istore_ istore_ : : Estructura de una Java Virtual Machine (JVM) Estructura de una Java Virtual Machine (JVM)

Ejemplo : factorial recursivo FactRecu.java FactRecu.java.;.; FactRecu FactRecu.;.; ; ; ; ; n n fact(); fact(); fact( fact( n) n) if if (n) (n) (); (); ; ; else else 0 0 (n*fact(n-)); (n*fact(n-)); fact; fact; (I)I; (I)I; FactRecu.java; FactRecu.java; :; :; :; :; FactRecu; FactRecu; Estructura de una Java Virtual Machine (JVM) Ejemplo : factorial recursivo C:\> C:\> javap javap -c -c verbose verbose FactRecu FactRecu Compiled Compiled from from FactRecu.java FactRecu.java fact(); fact(); FactRecu FactRecu extends extends Object Object Stack,Locals,Args_size FactRecu(); FactRecu(); iload_0 iload_0 Stack, Stack, Locals, Locals, Args_size Args_size : : i_ i_ aload_0 aload_0 : : : invokespecial invokespecial ; : if_icmpne if_icmpne ; java/lang/object."<init>":()v java/lang/object."<init>":()v : : i_ i_ : : : : i i : : iload_0 iload_0 : : iload_0 iload_0 Stack, Stack, Locals, Locals, Args_size : Args_size : i_ i_ bipush bipush isub isub : : invoke invoke ; ; : fact:(i)i : invoke invoke ; ; fact:(i)i : : istore_ istore_ fact:(i)i fact:(i)i : : : : imul imul : : i i Estructura de una Java Virtual Machine (JVM) Bibliografía y enlaces The Java API documentation Tim Lindholm, Frank Yellin, The JVM Specification, Second Edition, Addison Wesley, Java Series, April. D. Friedman, M. Wand, and C. Haynes, Essentials of Programming Languages, nd ed. MIT Press, 00. Bill Blunden, Virtual Machine Design and Implementation in C/C++, Wordware Publishing, March 00 JVM Instruction Reference (Quick refer.). Estructura de una Java Virtual Machine (JVM) Estructura de una Máquina Virtual Java (JVM) Autor: Pedro Pablo Garrido Abenza pgarrido@umh.es Estructura de una Java Virtual Machine (JVM)