fbpx
Wikipedia

Bytecode Java

El bytecode Java se encuentra dentro del archivo de extensión .class y es el tipo de instrucciones que la máquina virtual Java (JVM) espera recibir para posteriormente ser compiladas a lenguaje de máquina mediante un compilador JIT a la hora de su ejecución. Usualmente es el resultado de utilizar un compilador del lenguaje de programación Java (como javac), pero puede ser generado desde otros compiladores.

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, 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 

mientras que el código comparable en lenguaje ensamblador 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 cierto soporte para manejar lenguajes dinámicamente tipados. La mayoría de instrucciones de la JVM es de tipado estático, en el sentido de que las invocaciones de métodos verifican la “signatura” de estos en tiempo de compilación, sin un mecanismo de demorar esta decisión al tiempo de ejecución ni de elegir el método de “dispatch” según un enfoque alternativo.[2]

JSR 292 (Supporting Dynamically Typed Languages on the Java™ Platform)[3]​ incluye una nueva instrucción invokedynamic para permitir la invocació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 con el objetivo de 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 (3 de enero de 2007). «InvokeDynamic: Actually Useful?». Consultado el 25 de enero de 2008. 
  3. ver JSR 292
  •   Datos: Q137496

bytecode, java, bytecode, java, encuentra, dentro, archivo, extensión, class, tipo, instrucciones, máquina, virtual, java, espera, recibir, para, posteriormente, compiladas, lenguaje, máquina, mediante, compilador, hora, ejecución, usualmente, resultado, utili. El bytecode Java se encuentra dentro del archivo de extension class y es el tipo de instrucciones que la maquina virtual Java JVM espera recibir para posteriormente ser compiladas a lenguaje de maquina mediante un compilador JIT a la hora de su ejecucion Usualmente es el resultado de utilizar un compilador del lenguaje de programacion Java como javac pero puede ser generado desde otros compiladores Estructura EditarEl opcode de cada instruccion es de un byte de largo aunque algunas requieren parametros resultando en instrucciones multibyte No todos los 256 posibles opcodes son utilizados De hecho Sun Microsystems el creador original de la plataforma Java separo tres valores para que queden permanentemente sin implementar 1 Las instrucciones caen en las siguientes categorias Mover de memoria a registros y viceversa ej aload 0 istore Aritmetica y logica ej ladd fcmpl Conversion de tipos ej i2b d2i Creacion y manipulacion de objetos ej new putfield Manipulacion de la pila de operandos ej swap dup2 Control de flujo ej ifeq goto Invocacion de metodos y retorno de los mismos ej invokespecial areturn Tambien hay algunas pocas instrucciones para operaciones mas especializadas tales como manejo de excepciones sincronizacion etc El estilo del bytecode Java es analogo al de un lenguaje de programacion orientado a pila Por ejemplo el codigo ensamblador para sumar dos registros y mover el resultado a un tercero para un CPU de la familia x86 se ve asi add eax edx mov ecx eax mientras que el codigo comparable en lenguaje ensamblador de Java se veria asi iload 1 iload 2 iadd istore 3 Los dos valores a ser sumados son colocados en una pila de la que seran tomados por la instruccion de suma El resultado de la suma es vuelto a poner en la pila y recuperado por la ultima instruccion que lo mueve al registro Manejo de lenguajes dinamicos EditarLa maquina virtual Java provee cierto soporte para manejar lenguajes dinamicamente tipados La mayoria de instrucciones de la JVM es de tipado estatico en el sentido de que las invocaciones de metodos verifican la signatura de estos en tiempo de compilacion sin un mecanismo de demorar esta decision al tiempo de ejecucion ni de elegir el metodo de dispatch segun un enfoque alternativo 2 JSR 292 Supporting Dynamically Typed Languages on the Java Platform 3 incluye una nueva instruccion invokedynamic para permitir la invocacion de metodos basada en tipado dinamico Da Vinci machine es un prototipo de implementacion de maquina virtual que aloja las extensiones de la JVM con el objetivo de manejar estos lenguajes Asimismo la maquina virtual Java oficial desde su version 7 tambien incluye el opcode invokedynamic Referencias Editar VM Spec Reserved Opcodes Nutter Charles 3 de enero de 2007 InvokeDynamic Actually Useful Consultado el 25 de enero de 2008 ver JSR 292 Datos Q137496 Obtenido de https es wikipedia org w index php title Bytecode Java amp oldid 140361956, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos