Je n'aime pas contredire ce qu'un autre participant dit, mais il y a deux trois trucs avec lesquels je ne suis pas daccord.
Pas de pointeurs en Java : c'est un argument CONTRE Java, en terme de vitesse d'exécution, bien que ce soit un argument pour Java en terme de vitesse de développement. Le contrôle direct permet d'optimiser.
Le garbage collector : en C++, la libération de la mémoire est à la charge du concepteur. Il sait précisément quoi faire et à quel moment. Les erreurs sont faciles, mais un code bien conçu peut être efficace et rapide. Le garbage collector du Java est très générique. Etre capable de s'adapter à toutes les situations sans erreur imploique d'être assez lourd, Java a probablement à compter en permanence combien de pointeurs pointent sur chaque objet. Faire un garbage collector est très complexe, mais on ne crée pas de garbage collector en C++, on efface manuellement, pas automatiquement.
La compilation à la volée permet des optimisations intéressantes, car elle peut être exécutée juste pour la machine sur laquelle elle fonctionne. Cependant, ceci implique que la JVM ne peut pas passer tout son temps à chercher la petite bête car il ne faut pas traîner. Par ailleurs, les compilateurs C++ actuels sont des compilateurs optimiseurs extrémement performant car forts d'années d'expérience qui manquent à la compilation just in time de Java. Je dois cependant admettre que l''idée que les compilateurs Java optimisent moins bien n'est qu'une hypothèse, bien qu'une hypothèse raisonnable.
Hanlee a écrit :
Sache qu'au niveau de la gestion mémoire, Java est plus rapide que C/C++, quand il s'agit d'allouer et désallouer.
Je n'était pas au courant de ceci. La JVM passe par l'OS comme le c++, n'est-ce pas? Qu'est-ce qui rend Java plus rapide?
Par ailleurs, le Java a une gestion des erreurs performante mais lourde, car des vérifications sont effectuées systématiquement. Le C++ ne fait des vérifications que si on lui demande. Ceci complique le débogage d'une application en C++, mais accélère l'exécution.
Java utilise une API générique, donc non optimisée. Le C++ utilise une interface spécialisée pour l'OS sur lequel il fonctionne.
Au final, je pense que même avec la compilation just in time Java n'est pas au niveau du C++. Ceci, principalement parce que ce n'est pas l'objectif du Java.
Mais quels que soient les arguments, seul un test pourrait les départager avec certitude. Il faudrait créer un grand nombre d'applications en utilisant les deux langages, mais ce serait beaucoup de travail. J'aimerai toutefois faire remarquer que toutes les applications Java que j'ai utilisé sont plus lentes que leur équivalent C. (Par exemple : Eclipse rame sur des machines qui font fonctionner VC++ sans problème.)
Il y a tout un débat ici:
http://www.developpez.net/forums/vie...asc&highlight=
Partager