Pourquoi est-Erlang plus lent que Java sur toutes ces petites maths repères?

Tout en tenant compte des solutions de rechange pour Java pour un distribuée/simultanée/basculement/évolutive backend de l'environnement, j'ai découvert Erlang. J'ai passé un peu de temps sur les livres et les articles où presque tous d'entre eux (même Java accro gars) dit que Erlang est un meilleur choix dans de tels environnements, comme beaucoup de choses utiles sont hors de la boîte est moins sujette aux erreurs manière.

J'étais sûr que Erlang est plus rapide dans la plupart des cas, principalement en raison d'un autre de collecte des ordures de la stratégie (par processus), l'absence d'un état partagé (b/w threads et de processus) et plus compact types de données. Mais j'ai été très surpris quand j'ai découvert comparaisons des Erlang vs Java math échantillons où Erlang est plus lent de plusieurs ordres, par exemple à partir x10 x100.

Même des tâches simultanées, à la fois sur plusieurs cœurs et une seule.

Quelles sont les raisons? Ces réponses sont venues à l'esprit:

  • L'utilisation de Java primitives (=> pas de tas/gc) sur la plupart des tâches
  • Même nombre de threads dans le code Java et le processus Erlang alors l'acteur modèle n'a pas d'avantage ici
  • Ou simplement le fait que Java est statiquement typé, tout en Erlang n'est pas
  • Quelque chose d'autre?

Si c'est parce que ces sont très particuliers de mathématiques des algorithmes, quelqu'un peut-il montrer plus réel/la pratique de tests de performance?

Mise à JOUR: j'ai les réponses indiquant que Erlang n'est pas le bon outil pour chaque "fast Java cas", mais la chose qui est claire pour moi - ce qui est la raison principale de ces Erlang inefficacité ici: typage dynamique, GC ou pauvres indigènes de la compilation?

  • Très bonne question, je serais ravi de voir les réponses moi-même.
  • Java compile mathématiques assez efficacement du code machine natif et est souvent presque aussi rapide que du C++ 😉 je soupçonne erlang n'est pas. Vous pouvez essayer l'option de ligne de commande -nojit pour voir si cela ralentit Java à peu près la même.
  • Java compile mathématiques assez efficacement du code machine natif je suis sûr que vous savez il n'y a pas de byte code pour les mathématiques )) l'efficacité est ici détriment de primitives/pas d'objets, etc, si je mettre en œuvre le même calcul avec des Objets/Wrappers - les résultats seront très pire
  • btw, pourquoi ne pas erlang HiPE natif de la compilation d'arriver ou pourquoi est-il 10 fois plus lent?
  • Plaine Erlang par rapport à HiPE shootout.alioth.debian.org/u64q/...
  • comparer les mathématiques sur des nombres à travers de 10 000 threads et de voir laquelle est la plus rapide? puis le faire distribués, de revenir et de nous dire pourquoi vous pensez que cette réponse est constructive alors ( indice de référence des questions sont rarement constructif )
  • vrai, mais si j'ai un code tel dirstributed mathématiques avec les threads java num = core num (le tout par les exécuteurs testamentaires) +pas de synchronisation +envoyer que des primitives via le réseau, etc - Je doute que java sera plus lent, il peut être plus verbeux, susceptible de causer des erreurs, moins évolutive, etc, mais encore plus rapide, vous ne pensez pas?
  • Dans les deux cas, je pense que vous serait toujours l'écriture et le débogage de code, des jours peut-être semaines après le programmeur erlang avait fini leur code, et déplacé sur un autre contrat 🙂 Mon point est que vous avez manqué, retirez l'artificiel "petits repères" et de les faire monde réel des cas et montrer comment la non-constructive de cet indice de référence est.
  • Roberson -- me Semble que yetanothercoderu est à la recherche d'une explication technique de ce qu'est exactement la JVM et HiPE faire différemment dans ces cas, qui donne lieu à l'observé de différence de performances. afaict nos réponses n'ont pas été constructif parce que nous ne savons tout simplement pas.
  • C'est la façon dont je l'ai lu aussi. "Il n'est pas construit pour elle" n'est pas vraiment une réponse, est-il.
  • pourquoi ne pas mon Ferrari courriers pizzas aussi efficacement que mon Hyundai? Je veux dire vraiment pourquoi ma Ferrari brûler beaucoup plus de gaz et le coût beaucoup plus à tenir juste pour livrer quelques pizzas chaque nuit? Et ne me dites pas "il n'a pas été conçu pour le faire"!