web-dev-qa-db-fra.com

Quelle est la performance de Groovy par rapport à Java?

Quelles sont les performances de Groovy par rapport à Java?

52
user607498

Il est évident que Groovy est compilé sur JVM. Cela n’a cependant que peu à voir avec la performance. 

La chose la plus importante à noter ici est que Groovy est un langage dynamique. Cela signifie essentiellement que la plupart du temps, le compilateur Groovy aura peu de connaissances, voire aucune, sur le type d'objet pour lequel il appelle une méthode/récupère une propriété. Cela a un impact {énorme} _ sur les performances. Il se peut que des milliers de classes différentes implémentent someFancyMethodName () sans avoir une classe de base commune. Pourtant, un appel à obj.someFancyMethodName () doit choisir le bon. Il n'y a pas de meilleur moyen de le faire que de le décider au moment de l'exécution en fonction d'une réflexion. En fait, à cause de cela, chaque appel à une méthode est distribué via un appel à invokeMethod () sur la métaclasse de l'objet. Ceci est très visible dans stacktraces si votre programme lève des exceptions vilaines. C'est encore pire. Toute classe de groovy peut choisir de fournir des implémentations dynamiques des méthodes du même nom, c'est-à-dire de les produire au moment de l'exécution. Il y a beaucoup de magie Grails qui en fait un usage intensif. Une autre complication émerge lorsque la surcharge de méthode entre en jeu. La connaissance des types étant si limitée, il est impossible de choisir la bonne version de la méthode au moment de la compilation. Le code produit doit examiner les objets fournis, puis, en faisant une série d’i-els, choisir l’implémentation qui correspond le mieux à l’appel fourni. La plupart du temps, il s’agit d’un processus vraiment non trivial, qui n’a jamais été conçu pour être exécuté au moment de l’exécution. Pourtant, Groovy doit le faire afin de rester interopérable avec Java.

Tout cela rend Groovy plutôt lent. En fait, beaucoup plus lent et plus douloureux, il consomme plus de mémoire que la plupart des langages dynamiques existants (Python par exemple).

Cela dit, je conviens que l’utilisation de Groovy n’est certainement pas liée aux performances. La plupart du temps, vous n'optimiserez qu'une petite partie de votre code. Si les performances sont un tel problème, vous pouvez toujours recréer ces morceaux spécifiques en Java pur ou essayer Groovy ++. Je n'ai pas essayé moi-même, mais les résultats que j'ai lus à propos de l'Internet semblent plutôt prometteurs.

Groovy 2.0 Je n'ai aucune expérience de l'exécution de la nouvelle version. Franchement, je ne suis plus un utilisateur actif de Groovy. Cependant, je m'attendrais à ce que la plupart des problèmes décrits ci-dessus soient fondamentalement difficiles et nécessitent une avancée scientifique majeure. J'ai de l'expérience dans le développement de HHVM (une machine virtuelle PHP créée par Facebook) et des fonctionnalités beaucoup plus simples et moins performantes.

51
julkiewicz

Nous voici donc en 2012 et Groovy 2.0 est prêt à basculer ...

"Avec @CompileStatic, les performances de Groovy sont environ 1-2 fois plus lentes que celles de Java, et sans Groovy, elles sont environ 3-5 fois plus lentes. (...) Cela signifie pour moi que Groovy est prêt pour les applications où les performances ont être un peu comparable à Java ".

Test de performance: Groovy 2.0 vs Java http://Java.dzone.com/articles/groovy-20-performance-compared

Et en plus de l’auteur, j’utilise Groovy depuis 2008 avec beaucoup de succès, pas seulement pour les CV, mais pour faire le travail à temps. La performance est toujours relative à ce que vous voulez faire.


Pour ceux qui se plaignent de cas d'utilisation numériques, voici un cas d'utilisation réel utilisant des frameworks web: http://www.jtict.com/blog/Rails-wicket-grails-play-lift-jsp/


"Le prototype Groovy 1.8.x pour fib (42) prend environ 3,8 s (seulement 12% de moins que Java, plus de cent fois plus rapide que Groovy 1.0). Nous ne pouvons donc plus encourager les gens à écrire de tels" points chauds " en Java. "

Source: http://www.wiki.jvmlangsummit.com/images/0/04/Theodorou-Faster-Groovy-1.8.pdf

"Je suis impressionné par l'amélioration des performances de Groovy pour l'informatique numérique. Groovy 1.8 dans mon projet jlab (http://code.google.com/p/jlabgroovy/) dépasse parfois les performances de Scala dans mon autre projet ScalaLab (http://code.google.com/p/scalalab) !! "

Source: http://groovy.329449.n5.nabble.com/Great-improvements-in-Groovy-s-performance-for-numerical-computing-td4334768.html

17
Wanderson Santos

Groovy offre beaucoup plus de sucre syntaxique que Java, mais il fonctionne toujours sur la machine virtuelle et nécessite donc un peu plus de travail de la part de la machine virtuelle pour fournir ce sucre. Néanmoins, la différence est extrêmement mineure dans la grande majorité des usages normaux.

En outre, si vous écrivez une fonction trop lente dans Groovy, vous pouvez l’écrire en Java et l’appeler à partir de votre code Groovy. C'est la solution recommandée par l'équipe, et je peux en garantir le fonctionnement simple et efficace. 

À mon avis, pour la plupart des programmes, c’est un non-problème.

8
Melv

Une recherche rapide sur Google a donné d’anciens résultats ( http://www.codecommit.com/blog/Java/groovys-performance-is-not-subjective , http://www.christianschenk.org/ blog/performances-comparaison-entre-groovy-et-java/ ).

Groovy ++ semble également intéressant ( http://stronglytypedblog.blogspot.com/2010/02/Java-vs-scala-vs-groovy-vs-groovy.html ). 

Cependant, Groovy devrait être utilisé pour améliorer votre performances non les ordinateurs ...

7
Matthew

Je pense que vous devez regarder cette comparaison scientifique de Groovy vs Python vs PHP vs Ruby.

http://blog.websitesframeworks.com/2013/11/comparison-of-programming-languages-Ruby-groovy-python-and-php-353/

Ils ont fait un exercice et comparent ces langages de programmation aux facteurs suivants:

Comparison of time developing each exercise

Comparison of readability of the languages

Comparison of results in benchmarks and lines of code. From the project Computer Language Benchmarks Game

Conclusions

C'est une excellente étude rapide pour vous permettre de déterminer quelle langue est la meilleure.

2
Mohamed Ibrahim

De manière générale, Groovy sera plus lent ..__ Vous pouvez éviter cela en passant à Groovy ++ qui offre la plupart des fonctionnalités de Groovy, mais peut être compilé de manière statique et offre des performances comparables à Java.

2

Tout en développant AWS Lambdas, Java sera plus rapide que groovy. En dehors de cela, dans tous les autres scénarios, vous ne ressentirez peut-être pas beaucoup de différence.

0
Sanjari