Клас WeakHashMap — це втілення інтерфейсу Map, у якому зберігають лише слабкі посилання на його ключі. Це дозволяє зібрати пару ключ-значення, коли ключ не посилається за межі WeakHashMap.
Цей клас забезпечує найпростіший спосіб використовувати силу слабких посилань. Він корисний для втілення структур даних, подібних до реєстру, де утиліта запису зникає, коли її ключ більше недоступний для будь-якого потоку.
Функції WeakHashMap ідентичні HashMap з таким винятком: якщо диспетчер пам'яті Java більше не має сильного посилання на об'єкт, зазначений як ключ, то пару буде видалено.
Якщо єдиними посиланнями на об'єкт є слабкі посилання, збирач сміття може повернути пам'ять у будь-коли. Йому не потрібно чекати, доки система вичерпає пам'ять. Зазвичай. пам'ять буде вивільнено при наступному запуску збирача сміття.
package work; import java.util.*; public class Work { private static Map map; public static void main (String args[]) { map = new WeakHashMap(); map.put(new String("Львів"), "Харків"); Runnable runner = new Runnable() { public void run() { while (map.containsKey("Львів")) { try {Thread.sleep(500);} catch (InterruptedException ignored) {} System.out.println("Очікування потоку"); System.gc(); } } }; System.out.println(map); Thread t = new Thread (runner); t.start(); System.out.println("Головне очікування"); try {t.join();} catch (InterruptedException ignored) {} System.out.println(map); } }з таким виведенням
{Львів=Харків} Головне очікування Очікування потоку {}
Примітка. Якщо не увімкнути виклик System.gc(), система може не запустити збирач сміття, бо дана програма використовує мало пам'яті. У цьому випадку буде багатократне виведення рядка:
Очікування потоку
Для програми з активним використанням пам'яті такий виклик буде непотрібним.