Ich habe Cache, mit WeakHashMap implementiert, wie folgt aus:Garbage Collector Arbeit mit 2 WeakHashMaps
private static WeakHashMap<Object, WeakReference<Object>> objects = new WeakHashMap<>();
ich eine Instanz der Klasse Stadt haben:
City c = new City();
ich diese Instanz auf meine Karte jetzt hinzufügen wie folgt:
objects.put(c, new WeakReference<Object>(c));
Laut WeakHashMap jvm Implementierung, wenn Schlüssel keine starken Referenzen zu haben es ist von der Karte gelöscht (in seiner Freizeit).
Wenn also mein Objekt 'c' nicht mehr im Programm verwendet wird, wird es aus der Objektkarte gelöscht.
So weit, so gut.
Aber was passiert, wenn ich zwei Karten habe?
private static WeakHashMap<Object, WeakReference<Object>> objects1 = new WeakHashMap<>();
private static WeakHashMap<Object, WeakReference<Object>> objects2 = new WeakHashMap<>();
City c = new City();
objects1.put(c, new WeakReference<Object>(c));
objects2.put(c, new WeakReference<Object>(c));
Wird GC in diesem Fall das Objekt 'c' sammeln?
Wenn der Sensenmann entscheidet, ein Objekt zu ernten, ** alle ** Schwach Verweise auf sie wird angemessen zunichte gemacht. –
warum wickeln Sie den Wert der HashMap in WeakReference ein? Sie sollten dies nicht tun, Sie könnten Nullwerte in diesem Fall haben –
@EliaRohana Es kann nicht null sein, solange es woanders verwendet wird. – AndreyP