Mostrando postagens com marcador gc. Mostrar todas as postagens
Mostrando postagens com marcador gc. Mostrar todas as postagens

domingo, 15 de julho de 2007

Java e C++ Benchmark

Devido ao fato de muitos amigos c-maniacs ficarem, ainda nos dias de hoje, baseando suas opiniões sobre Java nas velhas VM's 1.3-1.4 (no melhor dos casos), resolvi escrever este post. Não, não sou eu quem farei os benchmarks, mas fiz uma simples pesquisa no google sobre "c +java +benchmark" e dei uma lida em alguns artigos que falam sobre este tema, alguns de versões um pouco mais antigas da VM e outros sobre versões mais novas (1.5+).

Sei que este assunto é muito delicado e nada é decisivo, existem muitas variantes a serem consideradas e existem muitos testes diferentes. Mas o que realmente vemos, se quisermos ver é claro, é que o Java HOJE não é mais igual aquele antigo Java 1.1 de que tantas pessoas baseiam suas opiniões.

Well "Talk is cheap. Show me the code."

Antes de mais nada, vamos lembrar que não adianta querermos comparar um C com Java, mas sim C++ com Java, e é isso que a maioria destes benchmarks faz.

Para começar, utilizo o recente post de Paul Buchheit (criador e Lead Developer do Gmail), onde o primeiro parágrafo do seu post ele diz:

"A lot of people seem to be taking this post to be the "Ultimate C vs Java shootout". It's not. Performance is a very complex topic. My only real point is this: Java (which used to be slow) has reached the class of "fast languages". For the majority of applications, speed is no longer a valid excuse for using C++ instead of Java."
Em suma, ele diz que não é sua pesquisa o ultimato neste assunto de benchmark, mas que Java hoje, está na classe das "Linguagens Performáticas" e que "Velocidade ou Performance" não é mais desculpa para usar C++ ao invés de Java.

Ainda no post de Paul Buchheit, ele ressalta, que muitos testes atualmente contam o tempo de "start up" da VM como tempo de processamento, e simplesmente o que ele fez, foi fazer a iteração 3 vezes para cada código, e isto fez com que Java, fosse um pouco mais rápido que C na segunda e na terceira iteração.

Outro site que achei interessante, e que já tinha visto a uns 2 anos atrás, é este e ele tem um gráfico (abaixo) bem legalzinho sobre o desempenho em várias coisas, e isto usando a VM 1.4.2.



Outro ótimo artigo, que recomendo a leitura, é o do J.P.Lewis and Ulrich Neumann, onde além de colocar seus resultados, ainda desmistificam algumas coisas como:

1. GC is it worse... or better?
2. Run-time Compilation
3. Why is "Java is Slow" so Popular?

Não usei mais sites, porque acho que estes 3 satisfizeram minha idéia. Apesar de que em cada link deste post, existem muitos outros links para outros artigos sobre benchmark. E algo importante a ressaltar é "Não tome por verdade apenas 1 estudo sobre benchmark".

Concluindo, este não é um post que porá fim a questão, mas ao menos tenta abrir um pouco a mente dos "bitolados". Parar no tempo não é nem um pouco bom, ainda mais na nossa área. Entretanto, este também não é um post para dizer "Larguem C++ usem Java e sejam mais felizes", existe sempre a melhor escolha, e é impossível escolher o melhor caminho numa bifurcação se você só conhece um dos caminhos.