gewusst wie: löschen von Objekten (HashMap), um garbage Collection - Java
Also, was ich bin hier ist ein java-Programm, das manipuliert, eine riesige Menge von Daten, und speichern Sie es in Objekte (vor allem hash-maps). Irgendwann in der Laufenden Zeit, die die Daten unbrauchbar und ich brauche, um Sie zu verwerfen, so kann ich geben Sie Speicherplatz frei.
Meine Frage ist, was wäre das beste Verhalten, um Sie zu verwerfen diese Daten werden von der garbage Collection eingesammelt ?
Habe ich versucht die Karte.klar(), aber das ist nicht genug, um den Speicher zu löschen, bereitgestellt von der Karte.
BEARBEITEN (Zum hinzufügen von alternativen, die ich versucht habe)
Ich habe auch versucht, das system.gc() erzwingen, dass der garbage collector zu laufen, aber es hat nicht helfen,
"das ist nicht genug, um den Speicher zu löschen, bereitgestellt von der Landkarte". Wie kam es zu dieser Schlussfolgerung?
InformationsquelleAutor Abdel-Rahman Shoman | 2015-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
HashMap#klar wird, werfen alle Einträge aus der HashMap, aber es wird nicht schrumpfen, es zurück zu seiner ursprünglichen Kapazität. Das bedeutet, dass Sie eine leere backing-array mit (in deinem Fall, denke ich), die Platz für Zehntausende von Einträgen.
Wenn Sie nicht Vorhaben, wieder verwenden HashMap (mit etwa der gleichen Menge von Daten), einfach wegwerfen, die gesamte HashMap-Instanz (legen Sie es auf
null
).Zusätzlich zu den oben genannten:
Es folgt, dass, wenn man eine hashmap mit einer großen Anzahl von Einträgen, und später im Programm wird kleiner (wenige Einträge), aber immer noch verwendet, sollte es wohl auch sein kopiert in eine neue HashMap mit einem copy-Konstruktor, anstatt um gehalten. Richtig?
Ich weiß nicht... in der Regel, Programme irgendeine Art von Arbeitsspeicher Anforderung, die Befreiung der Speicher, die benötigt werden mal wieder ein paar Minuten später nicht wie ein großer Gewinn. Auch freigeben von Speicher, der benutzt nie wieder kann nicht wirklich jeder profitieren. Ich würde nicht über diese Dinge zu kümmern, es sei denn, ich arbeite mit wirklich riesige Sammlungen. Und wenn das der Fall ist, vielleicht eine vollständige Lösung (wie off-heap storage) genannt wird sowieso für.
InformationsquelleAutor Thilo
wird nicht empfohlen, da die jvm sollte der einzige sein, kümmern Sie sich um die garbage collection. Mit
Class WeakHashMap<K,V>
in diesem Fall.Die Objekte werden automatisch entfernt, wenn der Schlüssel nicht mehr gültig
Bitte Lesen Sie diese link für Referenz
Ich bin srprised... Warum haben die Menschen nicht von Ihnen positiv bewertet werden, diese Antwort!?? Ich denke, WeakHashMap ist perfekt für solche Situationen. isnt es?? Kann mir bitte jemand erörtern??
Nun, Was, wenn Sie brauchen eine hashmap mit Reihenfolge, so dass Sie verwenden sollten, LinkedHashMap Sie können nicht verwenden Sie immer eine Art hashmap verursachen, müssen Sie möglicherweise die anderen sowieso.
InformationsquelleAutor shikjohari