“Luca”:
Olá
Agora sim!!!
Esta questão depende da otimização que o compilador faz com seu código. A menos que você compile com opção de compatibilidade com uma JVM muito antiga, geralmente o próprio compilador percebe a inutilidade de fazer int i = 0 dentro do loop e retira dos bytecodes finais (se não há necessidade por questões de escopo). Mas bem que a gente pode dar uma ajudinha ao compilador e já programar mais bonitinho.
[]s
Luca
Negativo, segundo a JLS esse tipo de otimização não é válida.
Compilador java algum faz qualquer tipo de otimização no código; somente os os jitters realizam alguma.
Existe um erro de conceito quando se fala em alocação das variaveis locais no java para a maioria das pessoas.
O custo de voce ter uma variavel local é irrisorio, em termos de uso de cpu (ignorando o gc por agora), é constante quanto ao número delas. Sim, isso mesmo, ter 1, 2 ou 100 variaveis locais vai consumir a mesma quantidade de ciclos da sua cpu.
Quanto a memoria utilizada, a conta não é trivial. O espaço total utilizado é igual ao máximo de variaveis visiveis para um statement do seu método. No exemplo do Daniel o uso é identico.
Mas qual método é mais rápido? O primeiro, por que o segundo faz um armazenamento morto (dead store, exite termo melhor?) em i “int i = 0”.
re-escrevendo o código assim:
while( x < 1000 ) {
int i = y + z;
x = i * 10;
}
A performance vai ser identica dado que ambos vão gerar exatamente o mesmo bytecode para o loop.
Ai vão algumas dicas de micro-optimização para java:
-Evite branches ao máximo, se não for possivel faça que o caso commum seja de branches pra traz aceitos e para frente rejeitados.
-Alinhe os dados da sua classe em 16 bytes levamos em conta os headers do objeto, 8 bytes na JVM da Sun.
-Selecione corretamente os operadores matematicos, adição sobre shifts, shifts sobre multiplicação.
-Não utilize valores ponto flutuante desnormalizados.
-Para estruturas vetoriais, utilize um vetor de arrays em vez de um array de vetores.