Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bytecode Java
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
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í:
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.
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 (http://java.sun.com/docs/books/jvms/second_edition/html/Ins
tructions.doc.html#60105)
2. Nutter, Charles (3 de enero de 2007). «InvokeDynamic: Actually Useful?» (http://headius.blo
gspot.com/2007/01/invokedynamic-actually-useful.html). Consultado el 25 de enero de
2008.
3. ver JSR 292 (http://www.jcp.org/en/jsr/detail?id=292)
Obtenido de «https://es.wikipedia.org/w/index.php?title=Bytecode_Java&oldid=140361956»