Alguem sabe dizer porque e quando nos construimos sequencias de instruçoes do tipo essa:
c = c + 1;
fica mais lenta que essa:
c += 1;
grato pela ajuda.
Algoritmos e desempenho
9 Respostas
<blockquote><div class="quote-author">“gollun”:</div>Alguem sabe dizer porque e quando nos construimos sequencias de instruçoes do tipo essa:
c = c + 1;
fica mais lenta que essa:
c += 1;
grato pela ajuda.</blockquote>
Talvez seja uma otimização da própria JVM… mas fica mesmo? 8O
tenho uma leve impressão que por tras acontessa…
c = c + 1
aux = c+1;
c = aux;
enquanto c += 1;
o valor seja calculado e já setado na mesma região de memoria
sem usar um auxiliar
suponho eu :roll:
Na minha opinião as expressões são totalmente equivalentes, o bytecode gerado será o mesmo, acredito que seja uma otimização do compilador e não da JVM… mas é só minha opinião…
<blockquote><div class="quote-author">“gollun”:</div>Alguem sabe dizer porque e quando nos construimos sequencias de instruçoes do tipo essa:
c = c + 1;
fica mais lenta que essa:
c += 1;
grato pela ajuda.</blockquote>
Como você chegou nessa conclusão? Como você fez a contagem do tempo?
Pra sustentar minha teoria, fiz um teste aqui, fiz esse codigo:
public class Teste{
public static void main(String[] args){
int a = 0;
a = a+3;
System.out.println(a);
int b = 0;
b += 3;
System.out.println(b);
}
}
Compilei e depois descompilei, o código gerado pelo descompilador foi esse:
public class Teste
{
public Teste()
{
}
public static void main(String args[])
{
int i = 0;
i += 3;
System.out.println(i);
int j = 0;
j += 3;
System.out.println(j);
}
}
O compilador do java é mais inteligente do que muitos pensam. Ele faz uma série de otimizações estáticas como essa.
<blockquote><div class="quote-author">“Carneiro”:</div><blockquote><div class="quote-author">“gollun”:</div>Alguem sabe dizer porque e quando nos construimos sequencias de instruçoes do tipo essa:
c = c + 1;
fica mais lenta que essa:
c += 1;
grato pela ajuda.</blockquote>
Como você chegou nessa conclusão? Como você fez a contagem do tempo?
Isso tem no livro dos Deitel.
Eu não sei até que ponto isso é verdade, mas as classes da API padrão são cheias disso e de outras coisas menos legíveis.
Se não me engano no livro para SCJP ele tem um paragrafo sobre isso.
O livro da Kathy tem um paragrafo sim, mas to sem o livro aqui e não lembro o que ele fala… hehehe