studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones java bytecode opcode

java - programacion - Evitando el código de operación de campo



manual de programacion android pdf (2)

Mi conjetura es que el punto es copiar los valores en las variables locales una vez, para evitar tener que obtener el valor del campo repetidamente del montón para cada iteración del bucle en las siguientes líneas.

Por supuesto, eso plantea la pregunta de por qué no se ha aplicado el mismo comentario en la variable local "len". (También esperaría que el JIT evite la recuperación de todos modos, especialmente porque las variables son finales).

En la clase String de Java, el método de recorte contiene esto:

int off = offset; /* avoid getfield opcode */ char[] val = value; /* avoid getfield opcode */

Estoy un poco desconcertado por el comentario "evitar el código de operación de getfield" ...

¿Qué significa esto? (Supongo que esto evita el uso de getfield en el bytecode, pero ¿por qué es esto una cosa buena [TM]?)

¿Es para evitar la creación de objetos en caso de que el recorte no haga nada (y, por lo tanto, se devuelva) o?


getfield se usa para obtener la variable miembro de una clase.

Como se puede ver en el código restante:

while ((st < len) && (val[off + st] <= '' '')) { st++; } while ((st < len) && (val[off + len - 1] <= '' '')) { len--; }

Así que cuando estás en un bucle, tiene que ejecutar getfield cada vez que haces referencia al value o al offset . Puede incurrir en un gran impacto de rendimiento si el bucle se ejecuta durante mucho tiempo (porque cada vez que se prueba la condición de bucle, se getfield un getfield obtención tanto para el offset como para el value ). Entonces, al usar las variables locales off y val , se reduce el impacto de rendimiento.