Lider do GMAIL afirma: Java é mais rápido que C

O lider de desenvolvimento do GMAIL Paul Buchheit afirma em seu blog que com seus testes, mesmo tendo sido tomado todos os tipos de otimizações do GCC o codigo de seu bentchmark roda mais rapido em Java que em C, o que é ineteressante !

Veja a noticia completa aqui:

outro site sobre o assunto:

http://www.idiom.com/~zilla/Computer/javaCbenchmark.html

Quem eh o tal do Paul Buchheit ?

Comentem !!!

[color=red]Movi para assuntos gerais porque não considerei como notícia
Luca[/color]

Ora, ora, ora…
Como foi comentado nesse blog do Buchheit, Java bem escrito costuma ser mais rápido que C++ não-otimizado ou portável.
Mas se você quiser, pode chegar tão perto do “metal” quanto quiser em C++. Em última instância, pode usar até “inline assembly”.
Por exemplo, copiar um arquivo usando java.nio é mais rápido que usar fopen/fread/fwrite em C++ para efetuar a cópia. Assim como alocar memória com Java é mais rápido que usar malloc/free em C++.
Mas se você se permitir usar as APIs específicas do sistema operacional no seu programa em C++, então a cópia será mais rápida. Tudo depende de quanto tempo você pode investir.

Repare que ele falou no GCC, usei um pouquinho e ele e lento para C++, bom para C, e agora parece que também para Java.

Até!

Ta… mas o GCC não é o compilador que melhor otimiza um código, se ele ao menos tivesse testado o compilador da intel, o i++ , acho que teriamos um bom retrospecto.

e quantos % do mundo usa o i++ ? me desculpe… temos que falar do mais utilizado… quantos projetos por ae vc ve compilado usando I++ ?

Normalmente você usa o icc (Intel C Compiler) se você quiser extrair até a última gota de desempenho de seu código em C, e estiver usando Windows ou Linux. (Se quiser o equivalente em Solaris, use o Sun Studio).
Nunca ouvi falar de “i++”, só de “g++” (o gcc para C++) ou de icc (o Intel C Compiler, que pode ser adaptado ao Visual Studio (Windows) ou ao gcc (Linux).

ops, i++ aqui é um link simbólico para o icc :oops:

:stuck_out_tongue:

De qualquer maneira, se você tem alguns dólares para gastar e tem um programa grande em C++, é interessante compilá-lo com o icc. Sempre pode ganhar alguns segundos de execução.

Só para deixar claro a opinião do autor:

Ou seja, ele disse que Java não é mais lento(costumava ser em suas versões iniciais) e que já pode ser considerado rápido a ponto de ser utilizado em diversas aplicações.

Sendo mais claro ainda, o foco da matéria era mostrar que Java pode ser tão rápido quanto as linguagens mais rápidas, e não dizer que é mais rápido que C++, inclusive em alguns testes dele o C++ foi mais rápido.

[]'s

Nossa, a discussão sobre a otimização que rolou nos comentários dá página é MUITO interessante… Do tipo, de quais otmizações a JVM pode fazer…

[quote]Mark said…
Paul - I think java does use the -ffast-math optimisation. It is used by default, and can be turned off using the ‘strictfp’ keyword. [/quote]

Será isso verdade? Alguém já fez algum aplicativo geográfico / físico em java para nos falar a respeito?

[quote]igouy said…

Following on from Matthew's replacement of the while loop by a for loop ....

Simply using a while loop in an ordinary way maybe marginally faster than the for loop - [/quote]

Quando programava em c/c++ (BREW) substituia sempre o for por um while, pela performace (mínima diferenca)… mas no meu mundo fazia diferença… isso faz diferença para alguem que desenvolve aplicativos/plataformas em Java?

[quote]Barry said…
You’re right I am guessing, and that’s the point. What you think the JVM is optimizing today may be completely changed in another version. So maybe in Java 7, even those for loops would be optimized out if you removed the trace statements. I’m actually surprised they’re not optimized now.
It’s clear the JVM is optimizing as the program runs. You can actually see the asterisks printing faster and faster as it runs. What’s not clear is what exactly is being optimized. Is it the math calculations, or the printing, a little of both, or something completely different? Maybe it figures out the program is printing the same thing over and over and compiles the program to simply
print “*”
print “**” etc. And the math is no longer needed. WOW! That would be something, wouldn’t it?[/quote]

Será isso possível / válido? Se um loop não utilizar o resultado de uma chamada a metodo, ele simplesmente pode ignorar a chamada aaquele método, aumentando a performance. Achei a idéia fantástica e nunca tinha pensado nisso. Hoje o editor já é capaz de identificar váriaveis não utilizadas, então a JVM também poderia fazer o mesmo.

[]'s

Isso é possível se:

  • O método for suficientemente pequeno (inlinable);
  • Ele não tiver efeitos colaterais (uma “função pura”).

Se o método for muito grande, ou não for possível determinar que ele não tem efeitos colaterais, não é possível efetuar a tal otimização.

http://java.sun.com/products/hotspot/whitepaper.html

Apenas uma referência para o pessoal que se interessou pelo assunto de performance no Java:

http://www.javaperformancetuning.com

[]'s

cada dia que passa Java owna cada vez mais muitas tecnologias, detonando os “grandes” como o C, o Python (quando a Nuxeus, não lembro o nome, que era o maior conteúdo Python do mundo, trocou toda a sua arquitetura pra plataforma JBoss + Seam) e o Ruby (quando os testes de bm do JRuby vs Ruby mostraram que o JRuby era mais rapido)

parabéns a equipe da Sun e aos desenvolvedores que contribuem para a evolução da linguagem

e com isso, nós, desenvolvedores só temos a ganhar :slight_smile:

Eu programo em Java mas algumas coisas no meu trabalho tenho que fazer em C. Cada vez estou mais convencido que nao ha qualquer desculpa hoje em dia para se perder tempo com C.

Programar em C eh como usar fita kacete para persistir dados hoje em dia, ou como usar aqueles telefones moveis que vinham numa maleta.

Eh simplesmente um atente ao meu precioso tempo e a minha baixa tolerancia ha coisas infernalmente complexas.

Essa semana estava compilando uma parada em Solaris e o compilador estava dando um monte de erros. Detalhe: O erro era mais ou menos assim: “Deu pau! Se vira para descobrir qual eh o problema!” O Google me salvou. Tinha que colocar uma flag louca no compilador para nao dar esse erro. Coisas sem qualquer cabimento logico…

Dai vc compila e quando executa eh um show de segmentation faults. Dai vc tem que resolver um a um colocando printf no seu codigo, pois usar gdb eh uma coisa para monges budistas.

Conclusao: Programar em C soh nos ultimos dos ultimos casos…

Tem um pessoal da minha faculdade (professores, um pessoal do INPE/CPTEC, etc) que não troca C puro por nada…
Eu não gosto muito de C porque é extremamente dificil fazer qualquer coisa. Acho legal para estudar e entender como as coisas funcionam “mais baixo nível”, mas fico só nisso. No meu trabalho programo 70% do tempo em Java e 30% em um sistema legado em C++. Não vejo diferença significativa de desempenho, mas sem dúvida Java é bem menos complexo que C++. Ainda assim, me divirto bastante com o C++. Mas realmente, usar GDB, ninguém merece…

Com o adendo dos processadores com cada vez mais nucleos hoje se encontra facil o de 4 nucleos… e a Intel tem previsao até 2012 o de 32 nucleos em escala industrial… a linguagem C vai perder cada vez mais mercado… pois fica cada vez mais dificil se aproveitar o poder de um computador usando linguagem C sem programacao Multithread… e garanto que se programar em C já é uma complicação desnecessária em dias de hoje (salvo em alguns quisitos) , fico imaginando programar em C usando Multithread…

Vejo C apenas como solucao para acesso a dispositivos em baixo nivel, já que linguagens como Java que são de uso geral que não fazem interface diretamente com o sistema operacional. ( o que na minha opiniao é uma pena. )

Tem professor que não troca C por nada simplesmente porque deve ser dificil para eles aprender alguma linguagem mais moderna.

Agora, C não é de todo ruim, basta saber o que se esta fazendo.

isso , ou como diz o saoj , basta ser um Monge Budista !

[quote=chun]Com o adendo dos processadores com cada vez mais nucleos hoje se encontra facil o de 4 nucleos… e a Intel tem previsao até 2012 o de 32 nucleos em escala industrial… a linguagem C vai perder cada vez mais mercado… pois fica cada vez mais dificil se aproveitar o poder de um computador usando linguagem C sem programacao Multithread… e garanto que se programar em C já é uma complicação desnecessária em dias de hoje (salvo em alguns quisitos) , fico imaginando programar em C usando Multithread…

Vejo C apenas como solucao para acesso a dispositivos em baixo nivel, já que linguagens como Java que são de uso geral que não fazem interface diretamente com o sistema operacional. ( o que na minha opiniao é uma pena. )[/quote]

Em Java, hoje, você é capaz de definir o que cada processador fará com seu programa? Ou você só escreve o programa e deixa a JVM se virar com isso?

E como C não tem Multithreads? pthread / windows / SDL…

Não esquece que também é preciso saber o que se faz em Java… geralmente o problema não é a linguagem, é o programador. (;

[quote=abilio][quote=cassio]Tem um pessoal da minha faculdade (professores, um pessoal do INPE/CPTEC, etc) que não troca C puro por nada…
Eu não gosto muito de C porque é extremamente dificil fazer qualquer coisa. [/quote]

Muitos professores universitários simplesmente pararam no tempo, ou sequer dominam o assunto que se propõe a lecionar. A comprovação final que tive deste fato foi quando um professor de redes que tive, ter falado que redes locais Token Ring ainda são largamento utilizadas (e devem estar rodando netware rsrs). Teve um outro também que afirmou ceticamente que o sendmail não é um daemon, pois um apesar dele escutar ficar rodando em background e escutar numa porta “daemons geralmente tem alto nivel de complexixade” (!?!?!?!). Enfim, nem sempre confie no que alguns professores de cursos superiores de tecnologia dizem.[/quote]

O fato não é que os professores pararam no tempo (tudo bem, alguns deles pararam sim) mas é que programação para computação científica é um mundo completamente diferente. Para este tipo de software, C funciona melhor, até mesmo fortran é muito usado ainda. Quase ninguém nesta área escreve nada OO, é tudo estruturado. E pode acreditar, eles fazem isso de propósito.
São programas para cálculo matemático, discretização de equações diferenciais, utilização de matrizes de double da ordem de 10000 x 10000, etc…
Não duvido que Java possa ser tào rápido quanto C neste ponto (claro, com as devidas otimizações e opçòes de compilação), mas já existe muita coisa rodando feita em C / Fortran (de vez em quando C++) e existe também um problema chamado tradição.
Enfim, será por isso que a previsão de tempo sempre falha?