¿Por qué es el número de variables locales no utilizado en un método de código de bytes de Java el más económico?

pf_miles:

Tengo un fragmento de código Java sencilla:

public static void main(String[] args) {
    String testStr = "test";
    String rst = testStr + 1 + "a" + "pig" + 2;
    System.out.println(rst);
}

Compilar con el compilador Java Eclipse, y examinar el código de bytes usando AsmTools. Muestra:

código de bytes

Hay tres variables locales en el método. El argumento es en la ranura 0, y las ranuras 1 y 2 son supuestamente utilizado por el código. Pero creo que 2 variables locales son justo lo suficiente - el índice 0 es el argumento de todos modos, y el código sólo necesita una variable más.

Con el fin de ver si mi idea es correcta, he editado el código de bytes textual, redujo el número de variables locales a 2, y ajusté algunas instrucciones relacionadas:

Edited

Me recompilado con AsmTools y funciona bien!

Así que ¿por qué no javac o el compilador Eclipse hacen este tipo de optimización de utilizar las variables locales mínimos?

GhostCat saludos Monica C.:

Simplemente porque Java mejoras en el rendimiento del compilador justo a tiempo.

Lo que se hace en la fuente de Java, e incluso lo que aparece en los archivos de clase no es lo que permite aumentar el rendimiento en tiempo de ejecución. Por supuesto, no se debe descuidar esa parte, pero sólo en el sentido de evitar hacer "estúpida" aquí.

Significado: la JVM en tiempo de ejecución decide si un método vale traduzca en (altamente optimizado!) Código de máquina. Si la JVM decide "no vale la pena de optimización", ¿por qué hacer javac más complejo y más lento por tener una gran cantidad de optimización de ahí? Más: cuanto más simple y básica el código de bytes de entrada, más fácil es para el JIT para analizar y mejorar esa entrada!

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=228937&siteId=1
Recomendado
Clasificación