Pergunta

C, eu pode alocar um registo para uma variável, por exemplo:

register int i = 0;

Estou ciente de que Java é uma linguagem interpretada, e é muitas muitas abstrações longe da CPU.

Existe algum mecanismo disponível para solicitação mesmo (e se a arquitetura não permite isso, então o que) que meus restos variáveis ??em um registo em vez de mover para o cache ou memória principal?

Eu não suponho que há alguma maneira, mas eu fui agradavelmente surpreendido antes.

Obrigado,

Foi útil?

Solução

Não, não há nenhuma maneira de solicitar isso em Java. No entanto, existem algumas coisas que você pode fazer que irá impedir um registo de ser usado, como aplicar o modificador volatile a uma variável de membro.

Outras dicas

register em C não coloca uma variável para registrar. Ele simplesmente dá o compilador a dica, que provavelmente seria bom para colocá-lo em um registrador.

Em Java não existe equivalente.

Se é bastante usada em um espaço curto que tornando-se um int registo valeria a pena, então o compilador hotspot deve ser capaz de descobrir isso em si.

Na verdade, o compilador hotspot deve ser capaz de fazer um trabalho melhor do que o compilador C / C ++, porque tem mais informações para trabalhar. compiladores C / C ++ tem que adivinhar; HotSpot pode medir.

Não há equivalente em Java. Mesmo em C não há garantia de que a variável será armazenado em um registro e compiladores são livres para ignorá-lo.

Em Java, o método será interpretado até o JIT hotspot determina heuristically que ele precisa ser compilado. Para código compilado que usa um algoritmo colorindo a variáveis ??atribuir e valores temporários aos registos, ou gravação de / para a RAM no caso de estouro de registo.

Estou ciente de que Java é uma interpretado linguagem, e é muitos muitos abstrações de distância da CPU.

Você praticamente respondeu à sua própria pergunta lá: -)

Mas, falando sério, em geral, escrever o seu código de forma mais clara e simples possível, eo JVM vai fazer o que puder para tratar o seu direito de código.

Você pode criar uma anotação chamada @ Register mas a JVM vai certamente ignorá-lo. por exemplo.

@register int i = 0;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top