Pregunta

En C, I, se puede asignar a un registro de una variable, por ejemplo:

register int i = 0;

Soy consciente de que Java es un lenguaje interpretado, y es que muchas muchas abstracciones lejos de la CPU.

¿Hay algún mecanismo disponibles a petición (y si la arquitectura no lo permite, así que lo que mi variable permanece en un registro en lugar de mover a la memoria caché o de la memoria principal?

No creo que hay ninguna manera, pero me ha sorprendido gratamente antes.

Gracias,

¿Fue útil?

Solución

No, no hay forma de pedir esto en Java. Sin embargo, hay algunas cosas que usted puede hacer que evitará un registro de ser utilizados, como aplicar el modificador volatile a una variable miembro.

Otros consejos

register en C no pone una variable para registrarse. Simplemente da el compilador la indirecta, que probablemente sería bueno para ponerlo en un registro.

En Java no hay equivalente.

Si se utiliza lo suficiente en un espacio corto que lo que es un int registro valdría la pena, entonces el compilador punto de acceso debe ser capaz de darse cuenta de eso mismo.

De hecho, el compilador punto de acceso debe ser capaz de hacer un mejor trabajo que el compilador de C / C ++, porque tiene más información para trabajar. C / C ++ compiladores tienen que adivinar; HotSpot puede medir.

No hay equivalente en Java. Incluso en C no hay garantía de que la variable se almacenará en un registro y compiladores son libres de ignorar.

En Java, el método será interpretado hasta que el JIT hotspot heurísticamente determina que necesita ser compilado. Para el código compilado que utiliza un algoritmo para colorear para asignar variables y valores temporales a los registros, o escribir a / desde la memoria RAM en el caso de desbordamiento de registro.

Soy consciente de que Java es interpretado idioma, y muchos muchos abstracciones lejos de la CPU.

Bastante respondió a su propia pregunta :-)

Pero en serio, en general, escriba su código de forma clara y sencilla como puede, y la JVM hace lo que puede para tratar su código a la derecha.

Puede crear una anotación llamada @Register pero la JVM definitivamente ignorarlo. por ejemplo.

@register int i = 0;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top