• [^] # Re: Sauf que ...

    Posté par . En réponse à la dépêche Wine débarque bientôt. Évalué à 6.

    Hélas, 1000x hélas, pas beaucoup de calcul numérique sur ce site (site qui a déjà été cité plus haut) (du moins tel que je l'entend, les FFT cadrant très bien avec ce que cela veut dire dans cet esprit). De l'algorithmie, certes, mais du calcul, quand il y en a, Java se fait ramasser. Jave reste derrière C (ce qui n'est guère étonnant). Étant donné la structure des tous petits tests proposé, un bon gros calcul numérique bien barbarre ferait fondre la différence C, C++ (d'ailleurs quand on entre dans ce domaine dans les tests précités, le C++ repasse largement devans Java et reste ultra proche de C). De toute manière le classement final dépand des coefficiant, on pourrait augmenter les perf du C++ en ajoutant des options de compilation (mais qui ne serait pas forcement utilisable en prod selon le contexte, donc faut-il le faire ou non?). Bref le lien me montre que Java est lent (même s'il y a pire).

    Mais on peut faire dire n'importe quoi aux bench, non ? Donc autant les oublier completement, why not...

    Je me rappele un soft de FTP distribué en Java qu'on avait écrit en projet de 2è année d'école d'info. Il utilisait un calcul MD5, et au début on avait pas trouvé la routine de la biblio standard qui permet de faire ça, donc on avait pris un code source Java qui avait été écrit au temps ou le calcul de MD5 n'était pas encore en standard dans la biblio. Les performances étaient, JIT ou pas JIT, horrible. N'importe quelle routine en C même écrite n'importe comment explosait litteralement le pauvre code source Java d'un rapport au moins x4 (j'ai plus les chiffres exactes en tête, mais à mon avis c'étais plutôt x10). Et à chaque fois que j'essaie la bête opération de prendre un gros bout de code C absolument bête, linéaire, etc, et que je le porte en Java tel quel (impossible de faire autrement qu'une bête recopie + adaptations ultra minimal de toute façon vu comment le code est bête), et que je fais un bench, ben j'ai la confirmation que Java c'est lent. Et je ne parle même pas des perfs qu'on peut atteindre en asm avec un code vectoriel. Dès qu'on a utilisé la routine fournis avec la JVM, les choses sont devenues correctes. Bref, quand Java est "rapide" en calcul numérique (et ça reste relatif, le "rapide"), c'est que les implémentations des routines de calcul critiques en question sont écrites en C.

    Java n'est pas mauvais quand il s'agit de faire de l'algorithmie. Par contre je n'appele pas être 3x plus lent s'en sortir bien en matière de calcul numérique, domaine par excellence ou l'on veut tout tirer du processeur, jusqu'à qu'il en puisse plus (en utilisant les optim que j'ai citée plus haut et d'autres, dont certaines sont inaccessibles par nature à Java). Java ne permet pas de faire ça. En matière de calcul numérique, je persiste Java est lent.

    En matière d'IHM aussi, Java est très lent. Pas besoin de faire des bench, suffit d'utiliser une appli pour ce rendre compte à quel point ça rame (ou alors c'est juste une coincidence et toutes les appli que j'utilise en Java rament ? De toute manière c'est vrai que je dois être mauvaise langue, si ça se trouve ce n'est pas Java mais mon ordi qui est lent, et ouai les gens qui ont des P12 à 20THz ne doivent pas trouver les appli dotées d'IHM et écrites en Java particulièrement lente ;)

    Je ne vois pas pourquoi malgré l'évidence les défenseurs de Java omnubilés par ce langage n'arrivent pas à reconnaitre qu'il est par nature plus lent que le C dans enormement de domaines. Ça n'a rien de honteux, ça n'en fait pas un langage pestiféré, et il a d'autres qualités. Python aussi est lent, Perl est lent, bash est lent (si tant est que dire que bash est lent ait un sens) et alors ?

    Bref à l'heure actuelle implanter les routines de calculs critique en Java n'a pas trop d'interet et cela va pas changer du jour au lendemain (ni même en 1 an).

    Pour un langage à VM, Java s'en sort vraiment pas mal, j'en conviens (grâce au JIT justement). Ça n'en fait pas un foudre de guerre. Java reste plus lent que d'autres.