Un teste de benchmark JVM

a marqué ce sujet comme résolu.

Salut ! Pour en apprendre plus sur les benchmarks et leur manière de faire,

J’ai essayé de faire un petit benchmark entre Scala et Kotlin ( OK j’ai aucune expérience dans les benchmarks et j’ai rien lu sur la manière de faire, donc j’ai sûrement fait du grand n’importe quoi ) mais j’aimerai bien voir du coup ce que vous en pensez et comment j’aurai dû faire

https://github.com/drabsolute/benchmark_test

Ce que j’en pense : c’est effectivement ultra naïf, et donc on ne peut absolument rien en déduire, comme tu t’en doutais 😉

Tu devrais effectivement te renseigner, y’a énormément de littérature sur le sujet. Surtout quand on parle de « langages alternatifs JVM » qui cherchent un peu tous à se comparer !

L’erreur la plus grossière je dirais, est de ne pas tenir compte du « warm-up » de la JVM et autres optimisation « à chaud » (JIT et compagnie).

Un bon point de départ, cet article : https://www.oracle.com/technetwork/articles/java/architect-benchmarking-2266277.html

Mais le truc à retenir c’est : si tu n’utilises pas JMH (qui du coup est intégré au JDK depuis la v9 ? J’ai un doute), ton benchmark ne reflète absolument pas la réalité, malheureusement. Donc un bon exercice si tu veux y aller pas à pas c’est de refaire la même chose avec JMH et de progresser dans cette voie !

+1 -0

Et je me demande fortement si il est toujours aussi pertinent d’analysé les performances entre langage !

Absolument pas :)

Déjà, il faut forcément un peu d’humilité, beaucoup de gens se sont évidemment posés cette question avant nous, et ont écrit sur le sujet. Citer Rob Fletcher (le papa de Spock et Spinnaker si je ne trompe pas) est plutôt sain, sans vouloir verser dans l’argument d’autorité (si Netflix le dit c’est que c’est vrai), il est intéressant de regarder les arguments qu’il avance. Donc tu es sur la bonne piste.

A côté de ça, jouer avec les frameworks de benchmarking, sans avoir la prétention de vouloir prouver quoi que ce soit, est un super exercice pour ta culture perso, je t’encourage vraiment à le faire !

pensez-vous qu’une nette différence peut être visible entre les langages de la JVM ?

Dans certains cas très précis, peut-être. Mais d’une part, il y a de forte chances qu’ils aient déjà été repérés et remontés aux équipes de développement en charge de ces langages (Jetbrains / EPFL dans ton cas) du coup ça vaut la peine de chercher sur leurs github et/ou forums de discussion, d’autre part, il y a très très peu de chance que tu tombes dessus dans la pratique.

"Dans la vraie vie" c’est assez rare (mais ça peut arriver hein !) de tomber sur un "pitfall" du langage : un cas dans lequel il n’est vraiment vraiment pas performant (moins que Java, et moins que les autres langages de la JVM). Si ça arrive, la première étape est de regarder le bytecode généré, reproduire le cas très précisément et le mettre en lumière (cf. JMH mentionné plus haut) et comprendre ce qui se passe fondamentalement avec la JVM (donc aller lire les docs de l’OpenJDK par exemple, qui liste les optimisations "communes" faites par la VM).

Un truc qui m’est arrivé par exemple, c’est me rendre compte que le pattern matching de Scala avait vraiment un impact non-négligeable sur une API que j’avais écrite. J’ai été hyper surpris, mais pour le coup, c’est une fonctionnalité qui n’existe ni en Java ni en Groovy, ni (encore) en Kotlin (les améliorations annoncées récemment sur le when s’en rapprochent beaucoup beaucoup mais c’est pas tout à fait un "pattern matching destructurant" à la Scala). Mais dans mon cas c’était vraiment très net, et plutôt bien documenté, et sur un bout de code qui ne faisait pas grand chose d’autre.

Encore une fois, dans la vraie vie, il y a de grandes grandes chances que les problèmes de performance viennent de la façon dont le code est écrit (anti-patterns, bugs, mauvaises pratiques) plutôt que du langage utilisé. Je dirais que la règle d’or est d’abord de connaître sur le bout des ongles (ou savoir retrouver facilement) toutes les mauvaises pratiques, être extrêmement vigilant sur tout ce qui implique des I/O, et si vraiment le langage semble être en cause, essayer de reproduire le soucis de la façon la plus simple qui soit.

+0 -0

Tout d’abord, merci pour ta réponse !

Cela éclaire et confirme énormément de chose qui m’ont étaient expliqué un peu partout ^^

De plus, j’ai un stage à faire ( comme tout les an, l’an dernier j’avais également fait un poste avec go et rust pour ce stage )

Aujourd’hui, je dois choisir le langage JVM le mieux adapté à mes besoins durant ce stage et les prochains ainsi, j’ai comparé au maximum mais ayant des éco systèmes identique et des fonctions similaire le choix de regarder d’un point de vue performance ma semblé logique !

Je pense également qu’au final c’est l’implémentation qui joue le plus sur la performance et que dans tout les cas la JVM / JIT font de tel optimisation qu’il est complexe de juger si tel ou tel est plus performant

Je pense que Scala est avant tout un langage avec des concepts très puissant et faisant de grosse optimisation lors de la compilation !

Au final, devant écrire un logiciel avec swing et devant réalisé des API REST ( et éventuellement des petits jeux avec libgdx sur mon temps libre pour mieux comprendre le langage en lui même )

Je pense qu’il serait préférable de resté en terrain connue et travaillé avec Kotlin, d’un autre côté Scala est un langage tellement intéressant qu’il pourrait m’apprendre bien plus.

Le choix est vraiment complexe et difficile à faire…

En tout cas, je vais continué sur ma lancé cette après-midi histoire d’explorer un peu JMH !

Pourquoi tu ferais pas un peu des deux ?

T’as l’air d’avoir besoin de développer côté client ET serveur. Rien ne t’empêche, par exemple, d’utiliser Kotlin+JavaFX côté client (moins pénible que Swing je pense) et Scala / Akka HTTP côté serveur pour tes APIs ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte