Ich muss einige Daten für die Lebensdauer mit einem Schlüssel verknüpfen, daher verwende ich WeakHashMap
. Zusätzlich muss ich einen Schlüssel durch den entsprechenden Wert erhalten. Der einfachste Weg ist, die Referenz beizubehalten, wenn Sie einen Wert erstellen:
Natürlich, während ich Value
in meinem Programm verwende, wird seine key
nicht verschwinden. Wenn es jedoch keine Referenzen mehr auf einen Schlüssel oder seinen Wert außerhalb der Karte gibt, wird er dann als Müll gesammelt? Oder verhindert die überlebende starke Referenz im Wert das?
Nein, es wird kein Müll gesammelt, siehe Javadoc :
Implementierungshinweis: Die Wertobjekte in einer WeakHashMap werden von gewöhnlichen starken Referenzen gehalten. Daher sollte darauf geachtet werden, dass Wertobjekte sich nicht direkt oder indirekt stark auf ihre eigenen Schlüssel beziehen, da dies verhindert, dass die Schlüssel verworfen werden.
Wie von @biziclop erwähnt, wäre eine Lösung, eine schwache Referenz auf den Schlüssel in Ihrem Wertobjekt zu speichern.
%Vor%Wenn man die Implementierung betrachtet, scheint die Antwort nein zu sein.
Dies ist von der WeakHashMap
Quelle:
Wie Sie sehen können, werden Entry
Objekte stark von der Karte selbst referenziert. Also, wenn die Karte zugänglich ist, so wird die Entry
, also Ihre Value
-Objekte, und Ihr Schlüssel auch.
Tags und Links java weak-references weakhashmap