Les fonctions de première classe à Scala peuvent-elles être une préoccupation pour allouer un grand espace Permgen dans JVM?

StackOverflow https://stackoverflow.com/questions/1845266

Question

En ce qui concerne les fonctions de première classe à Scala, il est écrit dans la programmation du livre par Scala:

Un littéral de fonction est compilé dans une classe qui, lorsqu'elle est instanciée au moment de l'exécution, est une valeur de fonction.

Lorsqu'il y aura de nombreuses fonctions de première classe utilisées dans un programme, cela affectera-t-il l'espace Permgen de JVM? Parce qu'au lieu de fonctions simples, le compilateur génère des classes pour chaque variation de la valeur de fonction (par exemple dans le cas de définitions variées des fonctions partiellement appliquées).

Était-ce utile?

La solution

Le profil de mémoire sera certainement différent de celui des programmes Java normaux, bien que vous puissiez régler à peu près n'importe quel paramètre de mémoire sur le JVM.

Tout ce que je peux dire, cependant, c'est qu'en un an de profonde implication dans la communauté Scala, j'ai jamais vu quelqu'un se plaindre de cela.

Autres conseils

Je n'ai pas de justification pour cela, mais mon sentiment est que si vous écrivez un programme non trivial, la quantité d'espace adoptée pour les "vraies" données de votre programme éclipsera considérablement la quantité d'espace adoptée par quelques-uns définitions de fonctions supplémentaires en classe.

En d'autres termes, je ne m'inquiéterais pas.

C'est un fait mathématique éprouvé que le nombre de classes que vous générez avec des fonctions de première classe sera en mesure d'approcher asymptotiquement, mais ne dépasse jamais le nombre de classes compilées dans la distribution à ressort complète. Ne vous inquiétez pas, ces pionniers traiteront d'abord les problèmes de Permgen!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top