Question

En C, je peux attribuer un registre pour une variable, par exemple:

register int i = 0;

Je sais que Java est un langage interprété, et beaucoup d'abstractions loin de la CPU.

est-il un mécanisme disponible pour même demander (et si l'architecture ne permet pas, donc ce) que ma variable reste dans un registre au lieu de se déplacer pour mettre en cache ou de la mémoire principale?

Je ne pense pas qu'il y ait aucune façon, mais je suis agréablement surpris avant.

Merci,

Était-ce utile?

La solution

Non, il n'y a aucun moyen de demander cela en Java. Cependant, il y a certaines choses que vous pouvez faire qui empêche un registre d'être utilisés, tels que l'application du modificateur de volatile à une variable membre.

Autres conseils

register en C ne met pas une variable d'enregistrer. Il donne simplement le compilateur l'indice, qu'il serait probablement bon de le mettre dans un registre.

En Java il n'y a pas d'équivalent.

S'il est utilisé assez dans un court espace qui rend un int registre serait utile, le compilateur hotspot devrait être en mesure de comprendre cela lui-même.

En fait, le compilateur hotspot devrait être en mesure de faire un meilleur travail que le compilateur C / C ++, car il a plus d'informations pour travailler avec. C / C compilateurs doivent deviner; HotSpot peut mesurer.

Il n'y a pas d'équivalent dans Java. Même en C, il n'y a aucune garantie que la variable sera stockée dans un registre et compilateurs sont libres de l'ignorer.

En Java, la méthode sera interprétée jusqu'à ce que le point d'accès JIT détermine heuristically qu'il doit être compilé. Pour le code compilé, il utilise un algorithme de coloration pour affecter des variables et les valeurs temporaires à des registres ou écrire dans / de la mémoire RAM dans le cas de débordement du registre.

  

Je sais que Java est une interprétation   la langue, et beaucoup beaucoup   abstractions loin de la CPU.

à peu près répondu là à votre propre question: -)

Mais sérieusement, en général, écrivez votre code aussi clairement et simplement que vous le pouvez, et la machine virtuelle Java fera ce qu'il peut pour traiter votre droite de code.

Vous pouvez créer une annotation appelée @Register mais la machine virtuelle Java sera certainement ignorer. par exemple.

@register int i = 0;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top