Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Bytecode Java
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
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 [[Compilación_en_tiempo_de_ejecución | 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.<ref name="reserved_opcodes">[https://java.sun.com/docs/books/jvms/second_edition/html/Instructions.doc.html#60105 VM Spec - Reserved Opcodes]</ref> 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 [[Unidad central de procesamiento|CPU]] de la familia [[x86]] se ve así: <syntaxhighlight lang="asm"> add eax, edx mov ecx, eax</syntaxhighlight> mientras que el código comparable en [[lenguaje ensamblador]] de Java se vería así: <code> iload_1 iload_2 iadd istore_3</code> 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.<ref>{{cita web | url=https://headius.blogspot.com/2007/01/invokedynamic-actually-useful.html | título=InvokeDynamic: Actually Useful? | fecha=3 de enero de 2007 |apellido=Nutter|nombre=Charles | fechaacceso=25 de enero de 2008}}</ref> [[Java Community Process|JSR]] 292 (''Supporting Dynamically Typed Languages on the Java™ Platform'')<ref>[http://www.jcp.org/en/jsr/detail?id=292 ver JSR 292]</ref> incluye una nueva instrucción <code>invokedynamic</code> 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 <code>invokedynamic</code>. == Referencias == {{listaref}} {{Control de autoridades}} [[Categoría:Lenguaje de programación Java]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Bytecode Java
»
Añadir idiomas
Añadir tema