Escolher a linguagem para implementar algum programa pode ser fácil quando usamos critérios pessoais (gosto mais, acho mais fácil ou o código fica mais claro).
Mas quando vemos pelo lado de desempenho a decisão não é tal fácil assim, e uma má escolha, principalmente em grandes projetos, poderá levar seu programa ao fracasso.
Então vamos analisar um pouco o desempenho das Linguagens Java e C++ com o entuito de conseguir sempre extrair o melhor das mesmas. Vale ressaltar que a escolha da linguagem mais adequada para o seu programa não exclui a necessidade de um algoritmo assintoticamente, sempre que possível, ótimo.
Agora serão apresentados diversos resultados de testes com vários algoritmos.
Para os testes foi usado o Sistema Operacional Ubuntu e processador Intel Q6600 quad-core.
Algoritmo 1 - Árvore Binária:
C++ (GNU G++)
Tempo em Segundos: 13.41
Memória em KB: 148,552
código
Java 6 (-server)
Tempo em Segundos: 30.73
Memória em KB: 269,744
código
Algoritmo 2 - Thread-Ring:
C++ (GNU G++)
Tempo em Segundos: 150.37
Memória em KB: 4,896
código
Java 6 (-server)
Tempo em Segundos: 31.27
Memória em KB: 117,956
código
Algoritmo 3 - K-nucleotide:
C++ (GNU G++)
Tempo em Segundos: 39.85
Memória em KB: 155,780
código
Java 6 (-server)
Tempo em Segundos: 50.78
Memória em KB: 391,540
código
Algoritmo 4 - Dígitos de PI:
C++ (GNU G++)
Tempo em Segundos: 3.75
Memória em KB: 1,548
código
Java 6 (-server)
Tempo em Segundos: 6.99
Memória em KB: 13,748
código
Se for para falar de velocidade fica claro através destes testes que C++ é mais rápido que Java, mas sempre temos que levar em conta que para muitas aplicações o Java oferece muitos recursos prontos que o C++ não ofecere.
Por exemplo em minha iniciação científica utilizo Java na interface, e fiquei satisfeito com seu desempenho. Provavelmente em C++ ficaria mais ágil porém ploto vários gráficos, utilizando JFreeChart e o visual deles fica muito bom. Também necessito de Threads para fazer algumas operações em paralelo, o que em C++ daria um bom trabalho, já em Java temos pronto a classe Thread que é muito fácil de usar. Então a dica é analisar sua aplicação e ver a real necessidade de ter um programa um pouco mais pesado com mais recursos.
Em suma, quando for fazer um programa que tenha muito processamento computacional C++, é o mais indicado, mas quando for necessário uma melhor apresentação dos dados e uso de gráfico ou algum outro recurso já implementado em Java, não perca tempo, e utiliza Java.
Para os fãs do C++ que estão esperando uma conclusão "C++ é mais rápido que Java, então usem C++!" ou os fãs de Java "Java é uma linguagem muito estudada hoje em dia e é multiplataforma então usem Java", fiquem tristes pois estas conclusões não estarão aqui. A idéia do artigo é ajudar nas escolhas e não criar polêmicas.
Bom minha parte termina aqui, agora quero saber o que vocês pensam sobre as Linguagens e sobre os testes (discutam de forma saudável).
Mas quando vemos pelo lado de desempenho a decisão não é tal fácil assim, e uma má escolha, principalmente em grandes projetos, poderá levar seu programa ao fracasso.
Então vamos analisar um pouco o desempenho das Linguagens Java e C++ com o entuito de conseguir sempre extrair o melhor das mesmas. Vale ressaltar que a escolha da linguagem mais adequada para o seu programa não exclui a necessidade de um algoritmo assintoticamente, sempre que possível, ótimo.
Agora serão apresentados diversos resultados de testes com vários algoritmos.
Para os testes foi usado o Sistema Operacional Ubuntu e processador Intel Q6600 quad-core.
Algoritmo 1 - Árvore Binária:
C++ (GNU G++)
Tempo em Segundos: 13.41
Memória em KB: 148,552
código
Java 6 (-server)
Tempo em Segundos: 30.73
Memória em KB: 269,744
código
Algoritmo 2 - Thread-Ring:
C++ (GNU G++)
Tempo em Segundos: 150.37
Memória em KB: 4,896
código
Java 6 (-server)
Tempo em Segundos: 31.27
Memória em KB: 117,956
código
Algoritmo 3 - K-nucleotide:
C++ (GNU G++)
Tempo em Segundos: 39.85
Memória em KB: 155,780
código
Java 6 (-server)
Tempo em Segundos: 50.78
Memória em KB: 391,540
código
Algoritmo 4 - Dígitos de PI:
C++ (GNU G++)
Tempo em Segundos: 3.75
Memória em KB: 1,548
código
Java 6 (-server)
Tempo em Segundos: 6.99
Memória em KB: 13,748
código
Se for para falar de velocidade fica claro através destes testes que C++ é mais rápido que Java, mas sempre temos que levar em conta que para muitas aplicações o Java oferece muitos recursos prontos que o C++ não ofecere.
Por exemplo em minha iniciação científica utilizo Java na interface, e fiquei satisfeito com seu desempenho. Provavelmente em C++ ficaria mais ágil porém ploto vários gráficos, utilizando JFreeChart e o visual deles fica muito bom. Também necessito de Threads para fazer algumas operações em paralelo, o que em C++ daria um bom trabalho, já em Java temos pronto a classe Thread que é muito fácil de usar. Então a dica é analisar sua aplicação e ver a real necessidade de ter um programa um pouco mais pesado com mais recursos.
Em suma, quando for fazer um programa que tenha muito processamento computacional C++, é o mais indicado, mas quando for necessário uma melhor apresentação dos dados e uso de gráfico ou algum outro recurso já implementado em Java, não perca tempo, e utiliza Java.
Para os fãs do C++ que estão esperando uma conclusão "C++ é mais rápido que Java, então usem C++!" ou os fãs de Java "Java é uma linguagem muito estudada hoje em dia e é multiplataforma então usem Java", fiquem tristes pois estas conclusões não estarão aqui. A idéia do artigo é ajudar nas escolhas e não criar polêmicas.
Bom minha parte termina aqui, agora quero saber o que vocês pensam sobre as Linguagens e sobre os testes (discutam de forma saudável).
Parabéns cara,
algo difícil de se encontrar é imparcialidade em artgos quando de fala em disputas tecnologias.
parabéns!
Na verdade, a comparação é ainda mais difícil. Testes de velocidade utilizando algoritmos têm sua validade, claro, mas não refletem a realidade de aplicações minimamente complexas. Nestes casos, a performance não é afetada somente pelo poder bruto de processamento matemático da linguagem, mas também por questões como gerenciamento de memória e concorrência.
Java possui controles para ambos embutidos na JVM, e muitas vezes, ela vai fazer um trabalho bem melhor do que um programador faria, que é o caso quando se usa C++.
Não me entenda mal, não estou querendo dizer que programador Java não precisa saber lidar bem com memória e concorrência! Mas, no C++, o cara tem que ser muito bom só pra fazer a coisa funcionar (não ter core dumps), enquanto no Java, ele poderia se focar mais em otimizações.
Programadores de verdade não usam Java!
Concordo com o anônimo de "26 de Junho de 2009 13:41."
Bora fazer um teste mais complexo! Com threads e tudo.
E o outro anonimo. Espero que o texto do caloni seja realmente uma piada, se não for, ele tem sérios problemas.
Eu quero saber o que realmente é um programador de verdade? É aquele que mete a mão na massa e só pq faz tudo na mão é considerado o cara ou aquele que conhece todos os procedimentos e por isso utiliza de recursos já prontos otimizando o seu tempo e atingindo o objetivo com qualidade?
Só tem anônimo aqui, não precisa ter medo não pessoal, discussão sempre faz bem.
Bom, eu penso que um programador de verdade é aquele que sabe usar recursos já prontos (como disse o último anônimo) e também sabe fazer na mão quando os prontos não atenderem 100% sua necessidade. Então o que se espera de um programador é que ele saiba usar as ferramentas que tem na mão e na falta delas, as implemente!
C++ rules. Java é pra mariquinhas...
"Mas quando vemos pelo lado de desempenho a decisão não é tal fácil assim..."
Bom, a decisão nesse caso me parece fácil demais. Difícil são outros quesitos, como funcionalidades embutidas e, principalmente, experiência da equipe.
Só que no caso de C++ e Java acho que dificilmente exista um projeto em que essas duas linguagens devem ser ponderadas. Geralmente um projeto "tá na cara" que é pra ser feito em C++ ou Java.
[]s
Sr. Anônimo de 27 de Junho de 2009 11:16,
Não se preocupe. É claro que meu artigo foi uma piada. Assim como o original, que foi um texto humorístico escrito no estilo de paródia de um antigo livro machista.
Ou seja, pelo menos no quesito linguagem, não tenho nenhum "pobrema".
[]s
Mto legal esse teu site, cara!!
Continue nessa...
Diogo Souza
diogosouzac.blogspot.com
Brilhante conclusão ! Justamente a inspiração que precisava para meu post polêmico sobre tatuagens...
Em quesito programação acredito que depende do tipo de soft, mas pessoalmente o Java atende aos meus objetivos.