- Se o programa não for orientado a processamento (e a absurda maior não é), não há sentido em falar na velocidade da linguagem, já que ela não será o lugar onde o programa ficará parado;
- É muitíssimo difícil fazer um bechmark que seja confiável, e reflita uma situação real de uso;
-
É mais difícil ainda no Java, já que a linguagem tem uma VM, que faz otimizações em Runtime e, em muitos casos, monta caches internos (o que garante uma primeira execução mais lenta, mas mais performance no “long run”);
- Se necessário, é possível otimizar até o último bit em C, o que vai certamente resultar num código mais rápido. Mas isso é caro, trabalhoso e extremamente sujeito a erros.
- Fuja dos mitos de performance. Nesse campo, fala-se muita besteira.
Eu trabalho no meu dia-a-dia com sistemas de tempo real, tanto em Java, quanto em C e C++.
Por isso, precisamos muito de performance e código otimizado. Porém, em 99.99% dos casos isso é possível simplesmente fazendo um código bem-feito. Claro, muitas vezes temos que rodar profilers e retirar gargalos, mas nunca precisamos trocar de linguagem ou fazer nada muito rebuscado para isso. Aliás, um código bem estruturado contribui até para que o profiler dê resultados mais precisos.
Geralmente, os problemas de performance são, nessa ordem:
- Operações de entrada e saída;
- Bugs no código;
- Má escolha de algoritmos;
É importante ressaltar que mitos de performance geralmente são parcialmente reais. Por exemplo, os métodos sincronizados em Java tem, sim, um overhead em relação a métodos comuns. Da mesma forma, existem oportunidades de otimização com const. Ou o goto é realmente mais rápido que os loops. O problema é o exagero que vem disso. Embora tudo isso seja verdade, praticamente nunca é recomendável substituir uma construção por outra, ou uma linguagem por outra, porque também praticamente nunca esse será o seu gargalo. Praticamente nunca a diferença será perceptível para o seu usuário. E, em termos de performance, se ele não vê, não há problema.