Como aparece sempre alguém a falar mal da performance do Java... ou a dizer que o java é uma m@#$& só porque não sabem trabalhar com Java, decidi abrir este tópico para desmistificar de uma vez por todas que o Java afinal não é assim tão lento como algumas pessoas pensam.
Para aqueles que dizem que o Java é uma m@#$&... a única conclusão que tiro... vocês pode ver aqui (http://javangelist.snipsnap.org/space/No-One-Cares-About-My-Language-And-Therefore-I-hate-Java)
Em relação ao tópico podem ver uma comparação entre a performance do java VS c++
http://kano.net/javabench/index
http://kano.net/javabench/data
Este teste foi realizado com a versão 1.4.2_01 JVM da Sun.
Para terem uma noção do progresso das vm's da sun podem ver uma comparação entre as vm's 1.5(Tiger) e 1.6(Mustang).
http://weblogs.java.net/blog/opinali/archive/2005/11/mustangs_hotspo.html
Quem quiser refutar os testes está à vontade :x2:
[[]]'s
?! java vs c++ ?
e k tal java vs c# ?
a questão destes testes é que podes implementar o fibonacci ou outro desses algoritmos de formas diferentes e usando estruturas de dados diferentes. logo os resultados podem ser biased.
?! java vs c++ ?
e k tal java vs c# ?
a questão destes testes é que podes implementar o fibonacci ou outro desses algoritmos de formas diferentes e usando estruturas de dados diferentes. logo os resultados podem ser biased.
Por isso é que tens acesso ao código fonte utilizado nos testes...
Achas que foi isso que aconteceu neste caso?
[[]]'s
Continua a ser ou biased propositadamente ou estupidamente.
Se quer fazer os testes SÓ em x86 que faça entre java e código compilado com flags como deve ser, para aproveitar ao máximo as caracteristicas de cada processador.
Não só isso mas por exemplo abri ao calhas um dos testes e deparei-me com isto...
//C++
unsigned long fib(unsigned long n) {
if (n < 2)
return(1);
else
return(fib(n-2) + fib(n-1));
}
//Java
public static int fib(int n) {
if (n < 2) return(1);
return( fib(n-2) + fib(n-1) );
}
Promenor de na de C++ a funcão ser long e na de Java ser int...Biased?? Nah...:rolleyes:
Tuaregue
17-02-2006, 21:15
quem programa sabe que a apartir do 1.4 o Java deu um tremendo salto em termos de performance, e neste momento até que está com uma performance aceitável, veja-se o caso do azureus que é feito em java.
quem programa sabe que a apartir do 1.4 o Java deu um tremendo salto em termos de performance, e neste momento até que está com uma performance aceitável, veja-se o caso do azureus que é feito em java.
Exactamente e depois vês o utorrent feito em C++ e compara as diferenças...
Java é uma excelente linguagem em muitos aspectos, mas como tudo tem falhas. Uma dessas falhas é que 2 aplicações iguais tête-a-tête num ambiente real a de java vai ser muito mais lenta e resource-hog que uma feita em C++ ou C.
Tuaregue
17-02-2006, 23:50
Exactamente e depois vês o utorrent feito em C++ e compara as diferenças...
Não compares o utorrent com o Azureus, são programas que fazem o mesmo na sua geneses, mas são totalmente diferente, o Azureus tem mais opções e afins e isso pesa. Mas é claro que todo (quase todo) o software que corre em cima de uma virtual machine vai ser mais lento, existem algumas execpções mas isso tem a ver com certos truques que fazem em algumas VM.
Isso é tudo muito giro mas na minha opinião o Java funciona bem é em server-side. O overhead que a JVM cria ao iniciar dá sempre a percepção real de que o código é mais lento. Por outro lado a quantidade de recursos que é necessário para correr uma aplicação tamanho e complexidade médio/grande é brutal o que não abona muito a favor do Java.
Eu reconheço que o Java tem alguns problemas mas a performance até nem é o maior deles. O problema são aqueles gajos que consideram o Java a melhor coisa do mundo e que este não tem defeitos... É o que dá quando se começa a criticar o ganha-pão de muita gente! :D
//C++
unsigned long fib(unsigned long n) {
if (n < 2)
return(1);
else
return(fib(n-2) + fib(n-1));
}
//Java
public static int fib(int n) {
if (n < 2) return(1);
return( fib(n-2) + fib(n-1) );
}
Promenor de na de C++ a funcão ser long e na de Java ser int...Biased?? Nah...:rolleyes:
O tamanho de um long em C++ é de 4 bytes.... O tamanho de um int em Java é de 4 bytes. :wow: Biased!?! Onde??!
[[]]'s
destr0yer
20-02-2006, 13:26
o long e o int em C++ actual é a mesma coisa! (inteiros de 32 bits!!!)
antes de existirem cpu's de 32 bits que o long era 32 bits e o int 16...
portanto vai dar no mesmo ;)
para os 64 bits utiliza-se o "long long"