Оглавление
- 1 Подсчет ссылок
- 1.1 Подсчет ссылок в информатике
- 1.2 Преимущества подсчета ссылок
- 1.3 Недостатки подсчета ссылок
- 1.4 Методы улучшения подсчета ссылок
- 1.5 Интерпретация графа
- 1.6 Борьба с неэффективностью обновлений
- 1.7 Параллельные настройки
- 1.8 Метод скрытого подсчета ссылок
- 1.9 Работа с эталонными циклами
- 1.10 Различные формы подсчета ссылок
- 1.11 Примеры использования
- 1.12 Преимущества подсчета ссылок в Delphi
- 1.13 Подсчет ссылок в других языках
- 1.14 Подсчет ссылок в файловых системах
- 1.15 Полный текст статьи:
- 2 Подсчет ссылок
Подсчет ссылок
-
Подсчет ссылок в информатике
- Метод хранения количества ссылок на ресурс
- Используется для освобождения объектов, которые больше не нужны
-
Преимущества подсчета ссылок
- Объекты восстанавливаются поэтапно, без длительных пауз
- Подходит для приложений реального времени и систем с ограниченной памятью
- Эффективен для управления ресурсами, не связанными с памятью
-
Недостатки подсчета ссылок
- Частые обновления снижают производительность
- Требует резервирования места для подсчета ссылок
- Не обрабатывает циклы объектов
-
Методы улучшения подсчета ссылок
- Использование слабых ссылок и алгоритма проверки меток
- Атомарные операции для параллельных настроек
- Объединение обновлений для снижения накладных расходов
-
Интерпретация графа
- Ориентированный граф с вершинами объектов и ребрами ссылок
- Удаление вершины аналогично сбору объекта
-
Борьба с неэффективностью обновлений
- Объединение нескольких обновлений в одно
- Метод Дойча-Боброва игнорирует ссылки в локальных переменных
- Метод Бейкера включает отложенные приращения
- Метод Леванони и Петранка объединяет избыточные обновления
-
Параллельные настройки
- Объединение обновлений устраняет необходимость в атомарных операциях
- Усовершенствованный алгоритм Леванони и Петранка работает с многопоточными приложениями
-
Метод скрытого подсчета ссылок
- Разработан Блэкберном и Маккинли в 2003 году
- Сочетает отложенный подсчет ссылок с копированием питомника
- Обеспечивает пропускную способность, сравнимую с самыми быстрыми копировальными системами
-
Работа с эталонными циклами
- Проектирование системы для избежания циклов
- Использование “слабых” ссылок для предотвращения циклов
- Разработка кода для явного удаления ссылок
- Автоматизация удаления ссылок с помощью объекта “владелец”
- Автоматическое обнаружение и сбор циклов с помощью отслеживающего сборщика мусора
-
Различные формы подсчета ссылок
- Взвешенный подсчет ссылок: присваивание веса ссылкам, отслеживание общего веса
- Подсчет косвенных ссылок: отслеживание источника ссылки, предотвращение преждевременного удаления объектов
-
Примеры использования
- Сбор мусора: отслеживание количества ссылок на объект, постепенное уничтожение объектов
- Компонентная объектная модель: подсчет ссылок для обеспечения совместимости между языками и системами
- C++: интеллектуальные указатели с подсчетом ссылок для автоматического управления объектами
- Какао: ручной подсчет ссылок, автоматический подсчет ссылок в iOS 5 и Mac OS X 10.7
- Delphi: автоматический сбор с использованием подсчета ссылок для встроенных типов
-
Преимущества подсчета ссылок в Delphi
- Оперативный сбор информации
- Отсутствие рекурсивных циклов
- Низкие затраты на размер кода
- Оптимизация использования локальных строк
- Интеграция в библиотечные процедуры
-
Подсчет ссылок в других языках
- GObject: атомарные операции, слабые ссылки
- Vala: подсчет ссылок на GObject, обработка строк с большим количеством копий
- Perl: подсчет ссылок, слабые ссылки
- PHP: подсчет ссылок, включение и выключение сбора циклов
- Python: подсчет ссылок, обнаружение и восстановление циклов
- Rust: типы Rc и Arc, отслеживание количества владельцев
- Squirrel: подсчет ссылок с определением цикла
- Swift: подсчет ссылок для экземпляров класса, слабые ссылки
- Tcl: подсчет ссылок для управления значениями, неизменяемость значений
- Xojo: подсчет ссылок, слабые ссылки
-
Подсчет ссылок в файловых системах
- Поддержка количества ссылок на блоки и файлы
- Освобождение файлов при достижении нуля ссылок
- Ссылки из каталогов и активных процессов