Wykorzystanie WeakHashMap? [duplikować

To pytanie ma już odpowiedź tutaj:

Kiedy użyjesz WeakHashMap lub WeakReference? 10 odpowiedzi

WeakHashMap to implementacja interfejsu Map, w której pamięć obiektu wartości może zostać odzyskana przez Grabage Collector, jeśli odpowiedni klucz nie jest już wywoływany przez żadną sekcję programu. Więc jeśli klucz nie jest już używany w programie. jego obiekt wejściowy zostanie wyrzucony bez względu na sposób użycia. Do dziś jest jasne

To różni się od HashMap, gdzie obiekt wartości pozostaje w HashMap, nawet jeśli klucz nie jest już odwołany. Musimy jawnie wywołać metodę remove () na obiekcie HashMap, aby usunąć wartość. wywołanie remove spowoduje usunięcie wpisu z mapy. Jego gotowość do korzystania z GC zależy od tego, czy nadal jest używana gdzieś w programie, czy nie.

Proszę znaleźć ten przykład kodowania wyjaśniający powyżej

Wykorzystanie WeakHashMap nad HashMap zgodnie z moim zrozumieniem

Moje rozumiem, że powinniśmy wybrać WeakHashMap tylko wtedy, gdy chcemy mieć pewność, że obiekt wartości zostanie odzyskany przez Grabage Collector, gdy klucz nie będzie już odnosił się do żadnej sekcji programu. To sprawia, że pamięć programu jest wydajna. Czy moje rozumienie jest tutaj prawidłow

Wykorzystanie WeakHashMap zgodnie z JavaDocs, mogłem zauważyć to oświadczenie

Ta klasa jest przeznaczona głównie do użytku z kluczowymi obiektami, których metody równości testują tożsamość obiektu za pomocą operatora ==.

Nie zrozumiałem, co znaczy powyższe stwierdzenie i jaki jest kontrast z moim rozumieniem użycia WeakHashMap. W rzeczywistości nie zrozumiałem, w jaki sposób ta instrukcja jest związana z użyciem WeakHashMap?

AKTUALIZACJA: po dalszym uważnym przeczytaniu poniższego oświadczenia javadocs

Wpis w WeakHashMap zostanie automatycznie usunięty, gdy jego klucz nie będzie już używany. Dokładniej, obecność mapowania dla danego klucza nie zapobiegnie odrzuceniu klucza przez moduł wyrzucania elementów bezużytecznych, to znaczy jego sfinalizowaniu, sfinalizowaniu, a następnie odzyskaniu. Po odrzuceniu klucza jego wpis jest skutecznie usuwany z mapy, więc ta klasa zachowuje się nieco inaczej niż inne implementacje mapy.

Poprawiam moje rozumienie z korzyścią dla mnie i innych osób

Wykorzystanie WeakHashMap nad HashMap zgodnie z kopalnią zmienione zrozumienie

Powinniśmy wybierać WeakHashMap tylko wtedy, gdy chcemy mieć pewność, że para klucz-wartość zostanie usunięta z mapy podczas uruchamiania GC, gdy klucz nie jest już w zwykłym użyciu poza samą map

Przykłady to: -

    WeakHashMap<Integer, String> numbers = new WeakHashMap<Integer, String>();
    numbers.put(new Integer(1), "one");// key only used within map not anywhere else
    numbers.put(new Integer(2), "two");
    System.out.println(numbers.get(new Integer(1))); // prints "one"
    System.gc();
    // let's say a garbage collection happens here
    System.out.println(numbers.get(new Integer(1))); // prints "null"
    System.out.println(numbers.get(new Integer(2))); // prints "null"


    Object key = new Object();
    m1.put(key, c1);
    System.out.println(m1.size());
    key = null or new Object() ; // privious key only used within map not anywhere else
    System.gc();
    Thread.sleep(100);
    System.out.println(m1.size());

questionAnswers(5)

yourAnswerToTheQuestion