Референс (от англ. reference) - это техника хранения количества ссылок на определенный ресурс, такой как объект или блок памяти. Узнайте о том, как работает подсчет ссылок, его преимуществах и недостатках в статье на Ласточка-Коломна.
Референс (от англ. reference) - это техника хранения количества ссылок на определенный ресурс, такой как объект или блок памяти. Одним из наиболее распространенных способов реализации референса является подсчет ссы́лок (reference counting) - алгоритм сборки мусора, который позволяет освобождать объекты, на которые больше нет ссылок.
![Референс: что это такое, где их применяют и как их искать](https://www.unisender.com/ru/blog/wp-content/uploads/2021/11/1.png)
Как работает подсчет ссылок?
Подсчет ссылок является одним из простейших способов реализации сборки мусора. Каждый объект содержит счетчик, который отслеживает количество ссылок, указывающих на него. Когда счетчик уменьшается до нуля, объект становится недоступным и помещается в список объектов на уничтожение.
Главное достоинство подсчета ссылок заключается в том, что объекты удаляются сразу, как только на них нельзя сослаться, и в инкрементальной манере, без долгих пауз для циклов сборки и с ясно определенным временем жизни каждого объекта. Это особенно важно для приложений реального времени или систем с ограниченной памятью, где требуется поддержание малого времени отклика.
![Что такое референс-лист компании и для чего нужен| Скорозвон](https://skorozvon.ru/images/2022/11/25/13_27_21_901_img.png)
Преимущества и недостатки подсчета ссылок
Одним из основных преимуществ подсчета ссылок является его эффективное управление памятью и другими видами ресурсов. Это позволяет не только освобождать память, но и управлять объектами операционной системы или другими ресурсами, которые могут быть дефицитными.
Также подсчет ссылок является хорошим решением для сборки мусора в распределенных системах, где объекты могут быть распределены по разным узлам сети.
Однако подсчет ссылок имеет два основных недостатка:
- Дополнительные механизмы для улучшения - в своей простой форме подсчет ссылок требует дополнительных механизмов для оптимизации и улучшения производительности. Например, для предотвращения циклических ссылок, которые могут привести к утечкам памяти, необходимо использовать дополнительные алгоритмы, такие как сборка мусора с пометкой и освобождением (mark-and-sweep).
- Неэффективность при работе с графом ссылок - подсчет ссылок неэффективен при работе с графом ссылок. Граф ссылок представляет собой ориентированный граф, где вершинами являются объекты, а ребра - ссылки между объектами. Механизм подсчета ссылок не учитывает циклические ссылки в графе, что может привести к утечкам памяти. Для решения этой проблемы используются другие алгоритмы сборки мусора, такие как алгоритм "сборка мусора с пометкой и освобождением".
Таким образом, подсчет ссылок является одним из способов реализации сборки мусора и эффективного управления ресурсами в программных системах. Он обеспечивает немедленное удаление объектов, необходимых для поддержания малого времени отклика, но требует дополнительных механизмов для оптимизации и решения проблем, связанных с циклическими ссылками.
См. также
Что нам скажет Википедия?
Подсчёт ссы́лок (англ. reference counting) — техника хранения количества ссылок, указателей или дескрипторов на какой-то ресурс, например на объект или на блок памяти. Обычно используется как средство освобождения объектов, которые больше не нужны и на них больше нет ссылок.
Подсчёт ссылок также известен как один из алгоритмов сборки мусора, где каждый объект содержит счётчик количества ссылок на него, используемых другими объектами. Когда этот счётчик уменьшается до нуля, это означает, что объект стал недоступным, и он помещается в список объектов на уничтожение.
Главное достоинство подсчёта ссылок перед отслеживающими сборщиками мусора в том, что объекты удаляются сразу, как только на них нельзя сослаться, и в инкрементальной манере, без долгих пауз для циклов сборки и с ясно определённым временем жизни каждого объекта. В приложениях реального времени или в системах с ограниченной памятью это очень важно для поддержания малого времени отклика. Подсчёт ссылок также является одним из простейших способов реализации сборки мусора. Он также обеспечивает эффективное управление не только памятью, но и другими видами ресурсов, например, объектами операционной системы, которые часто гораздо дефицитней, чем память (системы с отслеживающей сборкой мусора используют для этого финализаторы, но тем не менее отложенная очистка может вызвать проблемы). Взвешенные счётчики ссылок является хорошим решением для сборки мусора в распределённых системах.
Подсчёт ссылок в своей простой форме имеет два главных недостатка по сравнению с отслеживающей сборкой мусора, оба из них требуют дополнительных механизмов для улучшения:
При работе со схемами сборки мусора часто удобно представлять себе граф ссылок, который является ориентированным графом, где вершинами являются объекты, и, если объект A содержит ссылку на объект B, вершины соединяются ребром от вершины A к B. Так же есть специальные вершины, представляющие локальные переменные или ссылки, относящиеся к среде исполнения (рантайм). Рёбра никогда не указывают на эти вершины, однако рёбра могут направляться от этих вершин к другим.