Algoritmos e desempenho

9 respostas
G
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.

9 Respostas

B
<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
E

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:

J

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…

C
<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?

J

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);
    }
}
S

O compilador do java é mais inteligente do que muitos pensam. Ele faz uma série de otimizações estáticas como essa.

S
<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.

C

Se não me engano no livro para SCJP ele tem um paragrafo sobre isso.

BrunoBastosPJ

O livro da Kathy tem um paragrafo sim, mas to sem o livro aqui e não lembro o que ele fala… hehehe

Criado 5 de março de 2007
Ultima resposta 6 de mar. de 2007
Respostas 9
Participantes 9