Frage

In der Javadoc von WeakHashMap.html , sagte er

  

"Jedes Schlüsselobjekt in einem WeakHashMap ist   indirekt als Bezugspunkt eines gespeicherten   schwache Referenz. Daher wird ein Schlüssel   automatisch nur entfernt werden, nachdem   die schwachen Verweise darauf, sowohl innerhalb   und außerhalb der Karte, haben   vom Garbage Collector gelöscht. "

Und dann

  

Beachten Sie, dass ein Wertobjekt beziehen   indirekt auf seine Schlüssel über die   WeakHashMap selbst; Das heißt, ein Wert   Objekt kann stark auf einige verweisen   andere Schlüssel-Objekt, dessen zugehörige   Wertobjekt, das wiederum bezieht sich stark   auf den Schlüssel des ersten Wertobjekt.

Aber nicht beiden Schlüssel und Wert sollen schwachen Verweis in WeakHashMap verwendet werden? das heißt, wenn es nicht genügend Arbeitsspeicher ist, GC wird der Speicher durch das Wertobjekt gehalten frei (da die meisten der Wert Objekt mit hoher Wahrscheinlichkeit mehr Speicher als Schlüsselobjekt in den meisten Fällen nehmen)?

Und wenn GC den Objektwert freizugeben, kann das Schlüsselobjekt als auch frei sein?

Im Grunde bin ich für eine HashMap suchen, die Speichernutzung reduzieren, wenn es wenig Speicher ist (GC sammelt den Wert und die Schlüsselobjekte falls erforderlich).

Ist es möglich, in Java?

Danke.

War es hilfreich?

Lösung

sind schwache Verweise ungeeignet für Caches - NetBeans tut es, und dumm gehen

.

SoftReference ist das, was Sie wollen. Es ist eigentlich ziemlich schwierig, es richtig zu machen - so jemand andere Lösung kopieren. Einige Leute raten ausdrücklich Verwaltung Caches selbst.

References nur mit einer einzigen Referenz arbeiten. Es gab zu Java SE ein Vorschlag für das Hinzufügen von „ephemerons“, aber ich habe nicht eine Implementierung geht überall mit gesehen.

Andere Tipps

Die Idee ist, dass Sie diese Karte als „Lookup“ Datenstruktur verwenden, die nur die Schlüssel-Wert-Paare am Leben hält, die noch zu (über einen Schlüssel) verwiesen werden können. Dennoch, während die Grundidee ist schön, ich erinnere mich, dass es nicht so nützlich war, wie ich es sein würde, gehofft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top