67 votes

Quelle est la performance de Groovy par rapport à Java?

Ce que le rendement de Groovy par rapport à Java?

54voto

julkiewicz Points 3444

Il est évidemment vrai que Groovy est compilé pour la JVM. Toutefois, cela n'a que peu à voir avec la performance.

La chose la plus importante à noter ici est que Groovy est un langage dynamique. Essentiellement, cela signifie que la plupart du temps Groovy compilateur ont peu ou pas de connaissances sur le type d'un objet c'est l'appel d'une méthode sur / récupération d'un bien de. Cela a un énorme impact sur les performances. Il pourrait y avoir des milliers de différentes classes de la mise en œuvre de someFancyMethodName() de ne pas avoir une classe de base commune. Encore un appel à obj.someFancyMethodName() a à choisir la bonne. Il n'y a pas une meilleure façon de le faire que de décider lors de l'exécution basé sur une sorte de réflexion. En fait, à cause de cela chaque appel d'une méthode est diffusé par le biais d'un appel à invokeMethod() sur l'objet métaclasse. Ceci est très visible dans stacktraces si votre programme de jamais en jette méchant exceptions. C'est même pire. Toute classe groovy peut choisir de fournir des implémentations de méthodes du nom donné dynamiquement, c'est-à produire lors de l'exécution. Il y a une bonne quantité de Grain magique qui fait un usage intensif de lui. Une autre complication apparaît lors de la surcharge de méthode entre en jeu. Comme la connaissance des types est donc limitée, il est impossible de choisir la bonne version de la méthode au moment de la compilation. Le code produit est de regarder dans les articles livrés et puis en faisant une série de si-elses choisir l'application qui convient le mieux à la condition d'appel. Cette plupart du temps, c'est vraiment un processus non négligeable, qui n'a jamais été destiné à être réalisé au moment de l'exécution. Pourtant, Groovy a faire, afin de rester compatibles avec Java.

Tout ce qui fait Groovy assez lent. En fait, beaucoup plus lente, et, ce qui est plus douloureux, plus la consommation de mémoire que la plupart de la dynamique des langues (Python par exemple).

Cela dit, je suis d'accord que la raison pour l'utilisation de Groovy est certainement pas la performance. La plupart du temps, vous finirez par l'optimisation de seulement une petite fraction de votre code. Si la performance est un problème, vous pouvez toujours recourir à la réécriture de ces pièces spécifiques en Java pur, ou essayer Groovy++. N'ai pas essayé moi-même, cependant, les résultats que j'ai lu sur des sites en ligne semblait assez prometteur.

Groovy 2.0 je n'ai aucune expérience dans l'exécution de la version la plus récente. Très franchement, je ne suis pas un actif Groovy utilisateur plus. Je voudrais cependant s'attendre à ce que la plupart des problèmes décrits ci-dessus, sont fondamentalement difficile et nécessite une importante percée scientifique. J'ai une certaine expérience dans le développement de HHVM (PHP machine virtuelle créée par Facebook) et il y a beaucoup plus simple dispose que des résultats médiocres.

23voto

Wanderson Santos Points 1387

Donc, ici, nous sommes en 2012 et Groovy 2.0 est prêt pour le rock...

"Avec le @CompileStatic, la performance de Groovy est d'environ 1 à 2 fois plus lent que Java, et sans Groovy, c'est environ 3 à 5 fois plus lent. (...) Cela veut dire pour moi que Groovy est prêt pour les applications où la performance doit être quelque peu comparable à celle de Java."

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

Et d'ailleurs l'auteur, j'ai utilisé Groovy depuis 2008, avec un grand succès, non seulement pour le CV, juste pour rendre le travail fait en temps besoin de l'entreprise. La Performance est toujours par rapport à ce que vous voulez faire.


Pour ceux qui se plaignent de la numériques des cas d'utilisation, voici un véritable cas d'utilisation à l'aide de frameworks web: http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/


"Groovy 1.8.x prototype pour fib(42) prend environ 3,8 s (seulement 12% plus lent que Java, plus d'une centaine de fois plus rapide que Groovy 1.0), Donc on peut ne plus encourager les gens à écrire ces "points chauds" en Java."

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

"Je suis impressionné de voir combien Groovy a amélioré son rendement pour le calcul numérique. Groovy 1.8 dans mon projet jlab (http://code.google.com/p/jlabgroovy/) parfois surpasse la Scala, à la performance 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

12voto

Melv Points 1738

Groovy offre beaucoup plus de sucre syntaxique sur Java, mais encore tourne sur la JVM et nécessite donc un peu plus de travail par la JVM pour prévoir que le sucre. Néanmoins, la différence est très mineur dans la grande majorité des normales d'utilisations.

En outre, si vous ne vous arrive d'écrire une fonction qui s'exécute trop lentement en Groovy, vous pouvez l'écrire en droit de Java et de l'appeler à partir de votre code Groovy. C'est l'équipe de la solution recommandée, et je peux témoigner de il travail bien et simplement.

Il mon avis, pour la programmation de la plupart d'entre nous, c'est un non-problème.

8voto

Matthew Points 113

Une rapide recherche sur Google a donné quelques vieilles résultats de performance (http://www.codecommit.com/blog/java/groovys-performance-is-not-subjective, http://www.christianschenk.org/blog/performance-comparison-between-groovy-and-java/).

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

Cependant, la raison d'utiliser Groovy doit être parce qu'il améliore vos performances pas les ordinateurs...

3voto

Oliver Plow Points 545

Je n'ai qu'une très modeste Groovy 2.0/Java comparaison des performances. Voir cette entrée de blog.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X