2012-08-10 9 views
8

W Javie istnieje struktura danych o nazwie WeakHashMap, która przechowuje słabe referencje jako klucze. Za każdym razem, gdy słaba referencja zostanie usunięta z pamięci, pozycja zostanie usunięta z mapy.Java: stos o słabych referencjach

Jeśli mam strukturę danych, taką jak stos lub zestaw, w którym przechowuję słabe referencje, czy ich wpisy zostaną automatycznie usunięte, gdy słaba referencja zostanie usunięta z pamięci?

Poniżej znajduje się przykład stosu, który przechowuje słabe referencje.

Stack<WeakReference<Object>> objStack = new Stack<WeakReference<Object>>(); 
+0

Uh, tak ... ... – esej

+0

Czy na pewno nie zwróci wartości pustej? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+1

Jeśli myślisz o używaniu słabych referencji dla prawdziwej aplikacji, proszę ** nie rób tego **! Ludzie, którzy budują bibliotekę jądrową, żałują, że dodają je, ponieważ nie oferują żadnej korzyści. Zobacz tę [prezentację] (http://www.infoq.com/presentations/Extreme-Performance-Java), jeśli jesteś zainteresowany. – Augusto

Odpowiedz

2

Tak. To, co opisujesz, jest właściwością słabych odniesień w ogóle, a nie konkretnie.

Od the API:

Załóżmy, że garbage collector determinuje w pewnym momencie, że obiekt jest słabo osiągalny. W tym czasie atomicznie usunie wszystkie słabe odniesienia do tego obiektu ...

+0

Więc jeśli posiadasz listę odnośników WeakReferences i jeden z WeakReferences na środku listy wymyka się z pamięci, twoja lista wyników będzie działać zgodnie z oczekiwaniami? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Nie jestem pewien, jak na to odpowiedzieć ... zależy to od tego, co uważasz za "zgodne z oczekiwaniami". – Pops

+0

Myślę, że to, czego nie rozumiem, to kiedy wywołuje się metodę .get() na WeakReference, pobiera rzeczywisty obiekt. WeakReference nigdy nie jest ustawiony na wartość null tylko obiekt, na który wskazuje. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz