Bytecode Java

Bytecode Java

El bytecode Java es el tipo de instrucciones que la máquina virtual Java ejecuta, su bytecode. Usualmente es el resultado de utilizar un compilador del lenguaje de programación Java (como javac), pero puede ser generado desde otros lenguajes.

Estructura

El opcode de cada instrucción es de un byte de largo, aunque algunas requieren parámetros resultando en instrucciones multibyte. No todos los 256 posibles opcodes son utilizados. De hecho, Sun Microsystems, el creador original de la plataforma Java, separó tres valores para que queden permanentemente sin implementar.[1]

Las instrucciones caen en las siguientes categorías:

  • Mover de memoria a registros y viceversa (ej. aload_0,istore)
  • Aritmética y lógica (ej. ladd,fcmpl)
  • Conversión de tipos (ej. i2b,d2i)
  • Creación y manipulación de objetos (ej. new, putfield)
  • Manipulación de la pila de operandos (ej. swap, dup2)
  • Control de flujo (ej. ifeq, goto)
  • Invocación de métodos y retorno de los mismos (ej. invokespecial, areturn)

También hay algunas pocas instrucciones para operaciones más especializadas, tales como manejo de excepciones, sincronización, etc.

El estilo del bytecode Java es análogo al de un lenguaje de programación orientado a pila. Por ejemplo, mientras que el código ensamblador para sumar dos registros y mover el resultado a un tercero para un CPU de la familia x86 se ve así...

 add eax, edx
 mov ecx, eax

... el código comparable en assembler de Java se vería así...

iload_1
iload_2
iadd
istore_3

Los dos valores a ser sumados son colocados en una pila, de la que serán tomados por la instrucción de suma. El resultado de la suma es vuelto a poner en la pila y recuperado por la última instrucción, que lo mueve al registro.

Manejo de lenguajes dinámicos

La máquina virtual Java provee alguna capacidad de manejar lenguajes dinámicamente tipados. La mayoría del juego de instrucciones existente es de tipado estático, en el sentodo de que las invocaciones de métodos tienen verifican la “signatura” de estos en tiempo de compilación, sin un mecanismo de demorar esta decisión al tiempo de ejecución, o de elegir el método de “dispatch” según un método alternativo.[2]

El JSR 292 (Supporting Dynamically Typed Languages on the Java™ Platform)[3] añadió una nueva instrucción invokedynamic para permitir la invoación de métodos basada en tipado dinámico. “Da Vinci machine” es un prototipo de implementación de máquina virtual que aloja las extensiones de la JVM que apuntan a manejar estos lenguajes. Asimismo, la máquina virtual Java oficial, desde su versión 7, también incluye el opcode invokedynamic.

Referencias

  1. VM Spec - Reserved Opcodes
  2. Nutter, Charles (2007-01-03). «InvokeDynamic: Actually Useful?». Consultado el 2008-01-25.
  3. ver JSR 292

Wikimedia foundation. 2010.

Игры ⚽ Поможем написать реферат

Mira otros diccionarios:

  • Bytecode Java — Le bytecode Java est l ensemble des instructions exécutables par une machine virtuelle java. Par extension, il désigne un flux d octets binaire au format d une classe java. Ce flux est habituellement le résultat de la compilation d un code source …   Wikipédia en Français

  • Java bytecode — is the form of instructions that the Java virtual machine executes. Each bytecode instruction or opcode is one byte in length, however not all of the possible 256 instructions are used. In fact, Sun Microsystems, the original creators of the Java …   Wikipedia

  • Java (informatique) — Java (langage) Pour les articles homonymes, voir Java.  Ne doit pas être confondu avec JavaScript …   Wikipédia en Français

  • Java (langage de programmation) — Java (langage) Pour les articles homonymes, voir Java.  Ne doit pas être confondu avec JavaScript …   Wikipédia en Français

  • Java 5 — Java (langage) Pour les articles homonymes, voir Java.  Ne doit pas être confondu avec JavaScript …   Wikipédia en Français

  • Java Card — (JC) refers to a technology that allows small Java based applications (applets) to be run securely on smart cards and similar small memory footprint devices. Java Card is the tiniest of Java targeted for embedded devices. Java Card gives the user …   Wikipedia

  • JAVA — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom …   Wikipédia en Français

  • Java (lenguaje de programación) — Este artículo o sección se encuentra desactualizado. Es posible que la información suministrada aquí haya cambiado o sea insuficiente …   Wikipedia Español

  • Java (langage) — Pour les articles homonymes, voir Java.  Ne doit pas être confondu avec JavaScript. Java …   Wikipédia en Français

  • Bytecode — Le bytecode est un code intermédiaire plus concret (plus proche des instructions machines) que le code source, il n est pas directement exécutable. Il est contenu dans un fichier binaire qui représente un programme, tout comme un fichier objet… …   Wikipédia en Français

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”