Olá pessoal, sou o Filipe Névola, este blog foi muito ativo durante 2009 enquanto eu fazia universidade,
hoje em dia estou ativo no Twitter @FilipeNevola e voltando a escrever posts agora no meu perfil do Medium (29/05/2016).

[ 26/06/2009 ] 11

Java ou C++: eis a questão!

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).
Unknown comentou:

Parabéns cara,

algo difícil de se encontrar é imparcialidade em artgos quando de fala em disputas tecnologias.

parabéns!

Anônimo comentou:

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.

Anônimo comentou:

Programadores de verdade não usam Java!

Anônimo comentou:

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.

Anônimo comentou:

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?

Filipe Névola comentou:

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!

Anônimo comentou:

C++ rules. Java é pra mariquinhas...

Wanderley Caloni comentou:

"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

Wanderley Caloni comentou:

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

Diogo Souza comentou:

Mto legal esse teu site, cara!!
Continue nessa...
Diogo Souza
diogosouzac.blogspot.com

Anônimo comentou:

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.

Novo Comentário