You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Предположим, что нам нужно создать коллаж из 4 фотографий: мы выбираем их, после чего нажимаем кнопку "Create collage".
392
391
На этом этапе уже известная нам функция <code>weakRefCache</code> проверяет, есть ли нужное изображение в кеше. Если нет, то скачивает его из облака и помещает в кеш для возможности дальнейшего использования. И так происходит для каждого выбранного изображения:
393
-
</br><br>
394
392
395
393

396
394
397
-
</br>
398
-
399
395
Обратив внимание на вывод в консоли можно увидеть, какие из фотографий были загружены из облака - на это указывает <span style="background-color:#133159;color:white;font-weight:500">FETCHED_IMAGE</span>. Так как это первая попытка создания коллажа, это означает, что на данном этапе "слабый кеш" ещё был пуст, а все фотографии были скачаны из облака и помещены в него.
400
396
401
397
Но, наряду с процессом загрузки изображений, происходит ещё и процесс очистки памяти сборщиком мусора. Это означает, что хранящийся в кеше объект, на который мы ссылаемся используя слабую ссылку, удаляется сборщиком мусора. И наш финализатор выполняется успешно, тем самым удаляя ключ, по которому изображение хранилось в кеше. Об этом нас уведомляет <span style="background-color:#901e30;color:white;font-weight:500;">CLEANED_IMAGE</span>:
402
398
403
399

404
400
405
-
<br>
406
401
Далее мы понимаем, что нам не нравится получившийся коллаж, и решаем изменить одно из изображений и создать новый. Для этого достаточно снять выделение с ненужного изображения, выбрать другое, и ещё раз нажать на кнопку "Create collage":
407
-
</br><br>
408
402
409
403

410
404
411
-
<br>
412
405
Но, на этот раз не все изображения были скачаны из сети, и одно из них было взято из слабого кеша: об этом нам говорит сообщение <span style="background-color:#385950;color:white;font-weight:500;">CACHED_IMAGE</span>. Это означает, что на момент создания коллажа сборщик мусора ещё не удалил наше изображение, и мы смело взяли его из кеша,
413
406
тем самым сократив количество сетевых запросов и ускорив общее время процесса создания коллажа:
414
-
</br><br>
415
407
416
408

417
409
418
-
<br>
419
410
Давайте ещё немного "поиграем", заменив одно из изображений ещё раз и создав новый коллаж:
420
-
</br><br>
421
411
422
412

423
413
424
-
<br>
425
414
На этот раз результат ещё более внушительный. Из 4 выбранных изображений, 3 из них были взяты из слабого кеша, и только одно пришлось скачать из сети.
426
415
Снижение нагрузки на сеть составило около 75%. Впечатляет, не правда ли?
427
-
</br><br>
428
416
429
417

430
418
431
-
</br>
432
-
433
419
Конечно, не следует забывать, что такое поведение не является гарантированным, и зависит от конкретной реализации и работы сборщика мусора.
434
420
435
421
Исходя из этого, сразу же возникает вполне логичный вопрос: почему бы нам не использовать обычный кеш, где мы можем сами управлять его сущностями, а не полагаться на сборщик мусора? Всё верно, в большинстве случаев нет необходимости использовать `WeakRef` и `FinalizationRegistry`.
0 commit comments