comment faire pour effacer des objets (table de hachage) pour être le garbage collector de Java
Donc ce que je vais avoir ici est un programme java le manipule une énorme quantité de données et de les stocker dans des objets (Principalement de hachage-cartes). À un certain moment de la durée d'exécution des données devient inutile et j'ai besoin de jeter donc je peux libérer de la mémoire.
Ma question est de savoir quel serait le meilleur comportement à jeter ces données à ordures ?
J'ai essayé la carte.clear(), mais ce n'est pas suffisant pour effacer la mémoire allouée par la carte.
MODIFIER (Pour ajouter des solutions de rechange que j'ai essayé)
J'ai aussi essayé le système.gc() pour forcer le garbage collector à s'exécuter, mais il n'aide pas
"ce n'est pas suffisant pour effacer la mémoire allouée par la carte". Comment êtes-vous arrivé à cette conclusion?
OriginalL'auteur Abdel-Rahman Shoman | 2015-02-09
Vous devez vous connecter pour publier un commentaire.
HashMap#claire va jeter toutes les entrées de la table de hachage, mais il n'hésiteront pas à le ramener à sa capacité initiale. Cela signifie que vous aurez un vide sauvegarde de tableau avec (dans votre cas, je suppose) de l'espace pour des dizaines de milliers d'entrées.
Si vous n'avez pas l'intention de ré-utiliser la table de hachage (avec à peu près la même quantité de données), jeter de l'ensemble de la table de hachage instance (
null
).En plus de ce qui précède:
Il s'ensuit, donc, que si l'on utilise une table de hachage avec un grand nombre d'entrées, et plus tard dans le programme, il devient de plus petite taille (quelques entrées), mais encore utilisé, il doit probablement être copiée sur une nouvelle table de hachage avec un constructeur de copie plutôt que de conservés. Droit?
Je ne sais pas... en général, les programmes ont une sorte de mémoire de travail exigence, qui libère de la mémoire qui sera nécessaire à nouveau quelques minutes plus tard, ne semble pas être une grande victoire. Même la libération de la mémoire qui n'est jamais utilisé de nouveau ne peut pas vraiment profiter à personne. Je ne voudrais pas vous soucier de ces choses, à moins que je suis en train de travailler avec de très grandes collections. Et si c'est le cas, peut-être une solution plus complète (tels que les tas de stockage) est appelée pour de toute façon.
OriginalL'auteur Thilo
n'est pas recommandé car la jvm doit être le seul à prendre soin de l'ensemble de la collecte des déchets. Utiliser
Class WeakHashMap<K,V>
dans ce cas.Les objets seront automatiquement supprimés si la clé n'est plus valide
Veuillez lire ce lien pour référence
Je suis srprised... Pourquoi les gens n'ont pas upvoted cette réponse!?? Je pense que WeakHashMap est parfait pour de telles situations. n'est-il pas?? Quelqu'un peut s'il vous plaît discuter de cette situation??
Et bien, si vous avez besoin d'une table de hachage avec l'ordre de sorte que vous devriez utiliser LinkedHashMap vous ne pouvez pas toujours utiliser une sorte de table de hachage cause que vous pourriez avoir besoin de l'autre de toute façon.
OriginalL'auteur shikjohari