tabla qué que machine herramienta función extension cursos cumple codigo java jvm bytecode

java - que - qué función cumple la herramienta bytecode?



Código de bytes de Java: representación de tipos más pequeños que int (2)

En uno de los proyectos de mi universidad, estoy trabajando directamente con el código de bytes de Java.

Después de navegar por la lista de instrucciones disponibles para la JVM ( http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings ) vi que no existe tal cosa como la [b|c|s]store, solo se istore guardar para almacenar enteros en un variable local. ¿Significa que si en mi programa escribo:

short a; int b;

¿No estoy guardando ninguna memoria, porque cada entrada de variable local ocupa 4 bytes?

Siempre tuve la impresión de que el uso de tipos short o de byte ahorraría algo de memoria en el tiempo de ejecución.


Esto se explica en la sección 2.11.1 de JVMS :

Tenga en cuenta que la mayoría de las [...] instrucciones no tienen formularios para los tipos integrales byte , char y short . Ninguno tiene formas para el tipo boolean . Un compilador codifica cargas de valores literales de tipos byte y short usando instrucciones de la Máquina Virtual de Java que extienden sus valores a valores de tipo int en tiempo de compilación o tiempo de ejecución. [...] Por lo tanto, la mayoría de las operaciones en valores de tipos reales boolean , byte , char y short se realizan correctamente mediante instrucciones que operan en valores de tipo computacional int .

Se justifica así:

Dado el tamaño del código de operación de un byte de la Máquina Virtual Java, los tipos de codificación en códigos de operación ejercen presión sobre el diseño de su conjunto de instrucciones. Si cada instrucción escrita admitiera todos los tipos de datos en tiempo de ejecución de la Máquina Virtual Java, habría más instrucciones de las que podrían representarse en un byte. En su lugar, el conjunto de instrucciones de la máquina virtual Java proporciona un nivel reducido de soporte de tipos para ciertas operaciones. En otras palabras, el conjunto de instrucciones no es intencionalmente ortogonal. Se pueden usar instrucciones separadas para convertir entre tipos de datos no compatibles y compatibles según sea necesario.

Sin embargo, aunque esto se aplica a la carga / almacenamiento de las variables de pila, no se aplica a la carga / almacenamiento en matrices primitivas; Hay códigos de operación para todos los tipos primitivos.


No está guardando ningún tipo de memoria utilizando un int local long que es probable que estén en registros de 64 bits. Nota: cómo se distribuye el código de bytes y cómo se ejecuta realmente el código no es lo mismo.

Guardar dos bytes no es importante en ningún hardware nuevo. El valor de 2 bytes es menos de 1/1000 el tiempo que le toma parpadear incluso si está en el salario mínimo.