Если вы не хотите, чтобы что-то получалось в GC, вам следует иметь к нему сильную ссылку. Если на производительность части кода отрицательно повлияет исчезновение объектов за микросекунду, в течение которой последняя сильная ссылка была признана недействительной, этот код следует считать поврежденным.
Основное место, где слабые ссылки важны, - это ситуации, когда у объекта есть ссылка на что-то, о чем он на самом деле не заботится, но который он должен обновлять или наблюдать, если есть другие объекты, которые заботятся об этом. , Например, монитор сокетов может взять все входящие пакеты и поместить их в очередь, чтобы окно журнала пакетов могло их вытащить и отобразить. Если объект, который должен считываться из очереди, исчезнет без уведомления монитора сокетов, а у монитора сокетов будет сильная ссылка на очередь, он может продолжать добавлять пакеты в очередь, даже если никто не будет заинтересован в их чтении. Однако если монитор сокетов использует WeakReference для очереди, то в какой-то момент после исчезновения объекта, который должен был считываться из очереди, очередь станет пригодной для сбора мусора (поскольку монитор сокетов будет содержать только слабую ссылку). После того, как очередь была собрана, сборщик мусора мог заметить, что ее WeakReference был признан недействительным, и мог отключиться.