Визуализация алгоритмов для сборки мусора

в 17:17, , рубрики: Garbage collection, garbage collector, Mark-Compact, Mark-Sweep, Алгоритмы, Инфографика, копирующий сборщик, подсчёт ссылок, сборка мусора, системное программирование

Большинство разработчиков воспринимают сборку мусора (garbage collection) как нечто само собой разумеющееся. Это стандартный процесс, который периодически освобождает память, удаляя ненужные объекты. А вот американский программист Кен Фокс (Ken Fox) захотел досконально разобраться и заглянуть «под капот» современных сборщиков мусора.

Кен «поигрался» с пятью разными алгоритмами сборки мусора и опубликовал маленькие анимации, которые наглядно демонстрируют их работу.

Анимации большего размера выложены на github.com/kenfox/gc-viz.

Визуализация алгоритмов для сборки мусораКраткое пояснение по инфографике. Каждая картинка целиком — это память, выделенная для программы. Сначала она чёрная, то есть неиспользуемая, но постепенно начинается подсвечиваться ярко-жёлтым (операции записи) и ярко-зелёным (операции чтения). Со временем записанные фрагменты темнеют, чтобы показать развитие процесса во времени.

Можно заметить, что по ходу выполнения программа начинает игнорировать отдельные участки памяти. Они и считаются «мусором».

На первой анимации показано, как работает программа без сборщика мусора, то есть по методу очистки в конце. Самый простой способ: нужно дождаться окончания процесса, а потом очистить всё сразу. Это на удивление эффективная техника, пишет автор, если у вас есть способ разбить процесс на отдельные задачи. Так поступает, например, веб-сервер Apache.

Визуализация алгоритмов для сборки мусораДля контраста, вот как выглядит та же программа, но со сборщиком мусора, использующим технику подсчёта ссылок. Это ещё один относительно простой метод, когда подсчитывается количество ссылок на объект в памяти, и если оно падает до нуля, то объект удаляется.

Подсчёт ссылок — единственный алгоритм, хорошо совместимый с разными менеджерами ресурсов.

На анимации появились красные пикселы, которые соответствуют операции подсчёта ссылок. Можно оценить и эффективность сборщика, если сразу после красной вспышки область памяти освобождается.

Визуализация алгоритмов для сборки мусораВ блоге автора и на его странице Github можно изучить также алгоритмы сборщиков типа Mark-Sweep, который решает проблему с обработкой циклических структур в памяти (анимация справа), Mark-Compact с перемещением объектов в памяти (анимация) и копирующего сборщика, который тоже перемещает объекты в памяти, но делает это более простым способом (анимация).

По теме:
Garbage Collection наглядно

Автор: alizar

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js