| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/04/2011 14:53:26
|
marciobarroso
Virtual Machine Man
![[Avatar]](/images/avatar/6828f61cee49c7a4da0f9c1d3e03b857.jpg)
Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline
|
Pessoal,
Dúvida simples mas que vai dar muitas páginas de discussão.
Qual código é mais performático? Ou melhor, qual código necessitará de menos memória para execução?
Ou será que existe uma combinação das opções acima que pode ser a ideal?
Outra coisa. Existe diferença entre:
Me disseram que o this.getClass() vai fazer a JVM usar reflection para descobrir qual a classe ... lol ... eu não acredito nisso, mas não custa perguntar para garantir.
Obrigado pelas opiniões.
Ps: Se algum moderador ou admin achar que este post não se enquadra na sessão off-topic, favor mover para a sessão correta ... afinal, estou falando de java
[]'s
This message was edited 2 times. Last update was at 28/04/2011 15:03:54
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/04/2011 15:29:25
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
Em Las Vegas eu apostaria na #2! (Não em um teste isolado mas no uso "normal" do código)
This message was edited 1 time. Last update was at 28/04/2011 15:30:00
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/04/2011 15:33:34
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
Voce vai ter que olhar o bytecode resultante. Pega um heditor de hexa e compare os dois arquivos e veja a quantidade de linhas. Eu apostaria que daria tudo na mesma coisa.
Lembre-se que posteriormente o jit otimiza.
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/05/2011 14:00:16
|
marciobarroso
Virtual Machine Man
![[Avatar]](/images/avatar/6828f61cee49c7a4da0f9c1d3e03b857.jpg)
Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline
|
UP!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/05/2011 15:39:14
|
ArtesaoDeSoftware
JavaTeenager
![[Avatar]](/images/avatar/cb60dd928f72fe7ea03595dab995f070.jpg)
Membro desde: 14/02/2010 22:07:42
Mensagens: 159
Offline
|
Eu diria que esse esquema de concatenar String com + hoje em dia não tem diferença nenhuma. Se fizer reverso do bytecode vai ver que ele otimisa pra você.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/05/2011 22:58:36
|
rmendes08
GUJ Master
![[Avatar]](/images/avatar/9ee855f3ce4dd40182183463232e2162.jpg)
Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Offline
|
ArtesaoDeSoftware wrote:Eu diria que esse esquema de concatenar String com + hoje em dia não tem diferença nenhuma. Se fizer reverso do bytecode vai ver que ele otimisa pra você.
Na prática, sempre que o operador + é usado para concatenação de String o compilador instancia um StringBuilder e utiliza o append() para a concatenação. Mas mesmo assim é preciso tomar cuidado com o uso desse operador. Esse artigo esclarece muito bem o assunto:
http://blog.caelum.com.br/revisitando-a-concatenacao-de-strings-stringbuilder-e-stringbuffer/
|
"A Técnica é transformada em Arte por quem a emprega"
"O futuro pertence àqueles que acreditam na beleza de seus sonhos"
Computadores Fazem Arte
http://www.uaijug.com.br
"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/05/2011 16:32:08
|
RafaFloripa
JavaChild
![[Avatar]](/images/avatar/4e81f0efcdff7d2b9cdef48be59cbe26.jpg)
Membro desde: 10/09/2009 20:22:37
Mensagens: 127
Offline
|
a mesma coisa nos três abraços
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2011 13:03:11
|
wellington.nogueira
GUJ Ranger
![[Avatar]](/images/avatar/00c1de56b1cbab48f9869c1460d70e76.png)
Membro desde: 11/08/2006 11:29:56
Mensagens: 914
Localização: Osasco-SP
Offline
|
Só o fato de você estar usando um logger significa que você estará realizando rotinas de IO, logo, acredito que todo ganho de performance que você ganharia com manipulação de Strings seria "perdido". Quanto as opções: Concatenação usando + , o java troca pelo uso de StringBuilder como o rmendes08 falou. Então seria criado um StringBuider, uma String para "O processo " uma para " finalizou em " e uma para process.getName() e, claro, uma pelo método toString do objeto StringBuilder. Sem contar as chamadas ao método append. A segunda forma, creio que seriam apenas Strings: "O processo %s finalizou em %s" , process.getName(). Usaria alguma técnica de replace para cada %s e um String resultante para cada replace, sendo o último replace a String final a ser apresentada. (estou considerando que time não é uma String). Qual é mais performática? Em termos de uso de memória, diria que é a segunda forma. Mas para ter certeza, usaria algum profiler. O if que testa se o logger está ativo minimiza possíveis exceções geradas pelo mesmo, ou ao menos, evita chamadas desnecessárias. Quanto a diferença do .getClass() e do class, o getClass() vai precisar saber qual o tipo real do objeto. O .class, retornará o objeto correto da classe. Não sei se ocorre por reflexão ou por polimorfismo, mas prvavelmente é um desses, logo deve "gastar mais processamento". Segue um exemplo: Resultando em:
This message was edited 1 time. Last update was at 05/05/2011 13:04:42
|
57 45 4C 4C 49 4E 47 54 4F 4E
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
"Se você acha que programar em Java com Swing é simples? Acredite em mim, não é!"
http://developmentforever.wordpress.com/ |
|
|
 |
|
|