Bonjour !
Non ce sujet n'est pas un n-ième appel à troll...
En fait depuis quelques temps j'entends pas mal que les machines virtuelles sont le futur de la programmation et quelques benchmarks m'ont convaincu. En gros de ce que j'ai vu, le Java n'est pas tellement moins rapide que le C une fois que la JVM a correctement optimisé la méthode, de l'ordre de 10-20% seulement.
Cependant, je constate que tous les programmes Java que j'utilise sont assez lourds et lents. Je pense en particulier à Azureus, Eclipse, ou même par Looking Glass que j'ai testé il y a peu.
Alors, pourquoi ? Ces programmes sont-ils tous programmés avec les pieds ? Qu'est ce qui rend Java lourd alors que les benchmarks montrent une image assez flatteuse du langage.
Voilà, j'aimerais connaître votre avis, parce que je suis en train de découvrir le Java et c'est tout de même bien mieux conçu que le C++...
# Commencer par le commencement
Posté par Calvin0c7 . Évalué à 2.
Sur un PC de 2003 (P4 3.2, 1Go de RAM) sous mdv 2007 Eclipse et hyper super réactif (même avec Netbean lancé à côté + hsqldb).
De mon point de vu, les programmes Java que j'ai testé ne justement pas lourd et lent...
[^] # Re: Commencer par le commencement
Posté par MiniMoi . Évalué à 2.
Enfin je ne sais pas, il manque une certaine impression de fluidité, après je ne sais pas à quoi c'est du. Et puis je ne suis pas le seul à trouver Eclipse trop lent...
Mais la question c'est plutôt : pourquoi il n'y a pas de programmes rapides en Java ? (à ma connaissance)
[^] # Re: Commencer par le commencement
Posté par ndesmoul . Évalué à 3.
Le ressenti lourdeur peut venir aussi de l'interface graphique. Azureus et Eclipse utilise SWT et sont plutôt moins réactifs (en tout cas Eclipse) sous Linux que sous Windows, encore que la différence tend à diminuer mais c'est très subjectif.
D'ailleurs curieusement les dernières versions de Netbeans semblent plutôt plus réactives qu'Eclipse.
Sinon il sera sans doute possible de faire des choses intéressantes avec QT:
http://www.trolltech.com/developer/downloads/qt/qtjambi-tech(...)
[^] # Re: Commencer par le commencement
Posté par MiniMoi . Évalué à 2.
Pour la mémoire je savais déjà, c'est lié au Garbage Collector et à des optimisations de la JVM.
Je vais essayer de me faire mon avis, mais peut-être que je vais abandonner le C++ maintenant...
[^] # Re: Commencer par le commencement
Posté par ndesmoul . Évalué à 2.
Je suis pas certain que cela soit lié au Garbage collector sauf ponctuellement. Par contre les optimisation de la JVM peuvent jouer au début. Par exemple la première fois que tu cliques sur un menu il met une seconde à s'afficher alors que c'est instantané ensuite.
Pour faire rapidement une GUI en Swing, jette un coup d'oeil du côté de Netbean qui propose maintenant une système de création d'interface qui semble assez bien foutu (mais je ne l'ai pas testé de manière appronfondie).
# Java oui, c'est lent
Posté par Pascal . Évalué à 4.
Langages de scripts (bash,....)
sont plus lents que
Langages à VM (JAVA, Python, Perl, ....)
sont plus lents que
Langages C/C++
sont plus lents que
Assembleur
Mais tout cela,n'est que de la théorie. La vitesse d'un programme dépend aussi ttès fortement de la manière dont il est codé. Un programme JAVA bien programmé sera certainement plus rapide que son équivalent en C programmé avec les pieds.
Je pense aussi qu'un autre facteur est que dans le culture JAVA, on ne pense pas vraiment aux performances, mais plutot à la lisibilité/simplicité/fiabilité du code. Alors que tous les programmeurs assembleurs ont une culture de la performance/optimisation.
Par exemple: Combien de programmeurs JAVA pensent à faire un décallage pour réaliser une multiplication/divison par 2,4,8 ?
Combien de programmeurs JAVA jouent avec les concaténation de String tout va sans comprendre ce que cela implique au niveau performances ?
[^] # Re: Java oui, c'est lent
Posté par Calvin0c7 . Évalué à 2.
Ca je sais : 0
Là je serai plus circonspect, StringBuffer est quand même bien connu et largement utilisé. Le moindre cours Java de base précise (en même temps que la différence entre = et equals()) que les String sont des objects non modifiable.
[^] # Re: Java oui, c'est lent
Posté par ndesmoul . Évalué à 2.
[^] # Re: Java oui, c'est lent
Posté par Alex . Évalué à 2.
Et est-ce vraiment un mal ?
[^] # Re: Java oui, c'est lent
Posté par Pascal . Évalué à 2.
Non pas du tout, la seule chose que je voulais démontrer est que les programmeurs Java sont rarement intéréssés par les performances et l'optimisation de leurs programmes
[^] # Re: Java oui, c'est lent
Posté par TImaniac (site web personnel) . Évalué à 6.
Le programmeur ferait mieux de penser à optimiser son algo plutôt que de faire son malin avec des décalages de bits.
[^] # Re: Java oui, c'est lent
Posté par Pascal . Évalué à 3.
[^] # Re: Java oui, c'est lent
Posté par ndesmoul . Évalué à 2.
[^] # Re: Java oui, c'est lent
Posté par Alex . Évalué à 2.
Ruby lui est purement interprété (en attendant ruby 2)
Il y a un moment j avais vu des benchs de différents langages, et j avais été impréssioné par les regexp de perl, qui s en sortait dans les premières places.
En dehors de ça, est-ce que les perfs sont vraiment le point clef pour le choix d un langage ?
ca depend du contexte me direz vous
[^] # Re: Java oui, c'est lent
Posté par Pascal . Évalué à 2.
Ils donnent l'impression d'être interprétés car en fait, la compilation est réalisée juste avant l'éxecution.
Après je ne saurais pas te dire s'ils sont plus ou moins performants que JAVA.
[^] # Re: Java oui, c'est lent
Posté par パパフラクス . Évalué à 2.
Mais Python favorise l'utilisation de lib natives,
par exemple pour le calcul numérique, ce qui équilibre les choses.
Cependant de mon expérience cette lenteur relative ne devient que rarement pénalisante.
Pour moi, sur un algo d'apprentissage numérique, la phase d'apprentissage était vraiment super lente. Mais je l'avait un peu fait exprès, j'avoue, en implémentant naïvement l'algo entièrement en Python, pour voir le gain et la facilité d'utiliser Numeric plus tard.
La "migration" vers Numeric a été super rapide, et le gain plutôt impressionnant.
Il existe également <a ref='"http://psyco.sourceforge.net/introduction.html">Psyco qui permet d'améliorer les perf.
Cependant je n'ai jamais essayé.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.