Quelle est la performance de Scala par rapport à Java? [fermé]


La question dit en fait tout.

La raison derrière cette question est que je suis sur le point de démarrer un petit projet parallèle et que je veux le faire dans Scala. J'apprends scala depuis un mois et maintenant je suis à l'aise de travailler avec. Le compilateur scala lui-même est assez lent (sauf si vous utilisez fsc). Alors, comment fonctionne-t-il sur JVM? J'ai déjà travaillé sur groovy et j'avais vu parfois plus performé que java. Ma question est de savoir à quel point scala fonctionne bien sur JVM par rapport à Java. Je sais scala a de très bonnes fonctionnalités(FP, lang dynamique, typé statiquement...) mais en fin de compte, nous avons besoin de la performance...

Author: Matthew Farwell, 2010-03-19

3 answers

Une majorité de mon travail utilise Scala comme langage de haute performance. Si l'on accorde vraiment une attention particulière à la performance, Scala est presque toujours aussi bon que Java (sinon équivalent). Si l'on est négligent à propos des créations d'objets, par exemple, cela peut être plusieurs fois pire-comme cela peut être le cas en Java si vous utilisez une bibliothèque négligente à propos des créations d'objets. (En fait, mon code Scala est souvent plus rapide que mon code Java car je trouve beaucoup plus facile de rendre mon code hautement optimisé pratique à utiliser et réutiliser but mais le Java serait aussi rapide ou plus rapide si seulement j'avais plus de temps et de patience.)

Si vous voulez des données qui démontrent que Scala peut être fondamentalement aussi rapide que Java, consultez les résultats sur le Computer Languages Benchmark Game. (Une autre comparaison moins utile mais toujours intéressante pour la programmation multicœur à haut débit est le Wide Finder 2 de Tim Bray. Ceci est moins utile car l'algorithme n'est pas défini à l'avance, donc une grande partie de la les différences se résument à des différences dans l'algorithme.)

 25
Author: Rex Kerr, 2016-10-06 10:44:06

Scala est compilé en code octet et est typé statiquement de sorte que beaucoup des mêmes optimisations qui peuvent être faites pour les langages typés statiquement comme Java (par opposition aux langages typés dynamiquement comme Groovy) peuvent être faites. Donc, comparer Groovy à Scala, c'est comparer les pommes aux oranges.

Maintenant, comparaison Java à Scala:

Vous pouvez vous attendre à ce que Scala soit à égalité avec Java dans la plupart des situations. Scala peut être lent si vous programmez bêtement, par exemple, des tons de mix-ins via des traits pourraient fournissez une surcharge que Java ordinaire n'aurait pas.

Mais ...

Si les Traits résolvent en fait un problème complexe de bon goût, alors une solution en Java simple devrait s'attaquer à cette même complexité. Qui peut dire que la solution que vous écrivez en Java en utilisant vos propres modèles sera plus efficace que ce que vous obtenez gratuitement dans Scala (rappelez-vous, le compilateur Scala a été écrit par des personnes qui sont probablement un meilleur programmeur que vous).

D'autre part, si vous utilisez des fonctionnalités de langue sans raison valable (par exemple, des objets entiers lorsque des primitives int simples le feront), votre code sera gonflé, lent, merde, quelle que soit la langue que vous utilisez.

En outre, considérez la classe spéciale d'applications basées sur la requête-réponse qui interagissent avec une base de données ou une autre ressource intensive en E/S. Le goulot de la bouteille ne sera pas le "nouvel" opérateur ou la surcharge d'invocation de la méthode virtuelle - ce sera presque certainement l'E / S.

En résumé, les performances entre Scala et Java sont à peu près les mêmes, et ne devraient pas être la principale raison pour laquelle vous choisissez l'un plutôt que l'autre dans 99% des cas. Étant donné que le travail humain qualifié coûte plus cher que le matériel informatique, il est préférable de choisir la langue dans laquelle vous pouvez (ou pouvez apprendre) programmer le plus efficacement (y compris vos coéquipiers). Si Scala vous permet d'écrire un dixième du code en Java, vous pourriez gagner 10 fois l'avantage en l'utilisant. Si Scala vous ralentit 10 fois (parce que c'est trop difficile à lire), restez avec Java!

 14
Author: les2, 2010-03-19 23:03:33

Je suis d'accord avec les commentaires de Rex dans ce post, et j'ai une expérience personnelle pour le soutenir. J'ai converti une applet de traitement de java en scala, sans modifier les détails d'implémentation, et les deux applets ont rendu une trame en ~6 ms, avec peu de variation.

 5
Author: nullspace, 2010-04-01 01:28:20