Si j'ai une immuable carte que je pourrais attendre (sur une période de temps très court - comme quelques secondes) à l'ajout/suppression des centaines de milliers d'articles de, est la norme HashMap
une mauvaise idée? Disons que je veux passer 1 Go de données à travers la carte en < 10 secondes de telle sorte que la taille maximale de la carte à un instant est seulement 256 Mo. J'ai l'impression que la carte conserve une sorte d '"historique" mais je vais toujours accéder à la dernière table mise à jour (ie je ne passe pas la carte) parce que c'est une variable membre privée d'un Actor
qui est mis à jour/accessible uniquement à partir de réactions internes. Fondamentalement, je soupçonne que cette structure de données peut être (partiellement) en défaut for issues I am seeing around JVMs going out of memory lors de la lecture en grandes quantités de données dans un court laps de temps.mise en œuvre Immuable Carte des énormes cartes
Serais-je mieux avec une implémentation de carte différente et, si oui, de quoi s'agit-il?
Oui - Je l'ai modifié pour utiliser la carte mutable mais je pensais que tout le point de FP était que l'immuabilité était géniale! Cette application devrait facilement fonctionner dans moins de 256 Mo de mémoire à partir d'une perspective «combien de données a-t-elle vraiment besoin à un moment donné». –
La grande immutabilité dépend de l'application. Si vous exécutez une application avec, par exemple, des arborescences de messages envoyés à un groupe de clients, l'immuabilité est une aubaine - vous envoyez simplement l'arborescence actuelle et vous n'avez pas à vous soucier de la structure de données elle-même. de dessous toi. (Vous devez encore attraper des cas comme le client demandant d'ajouter un commentaire à un thread qui est supprimé au moment où ils répondent.) Pour un travail à haut débit dans des structures de données privées qui tournent très rapidement, l'immuabilité offre peu d'avantages et exige beaucoup de frais généraux. –
ouais, c'est ce que je découvre! Alors, comment Haskell ou Clojure se débrouillent-ils dans ces situations? Ne font-ils pas * appliquer * l'immutabilité? –