2.10 – Сборщик мусора
Lua осуществляет автоматичекое управление памятью. Это означает, что вам не нужно
думать о выделении памяти при создании новых объектов и ее освобождении, когда
объект становится ненужным. Lua время от времени автоматически запускает процедуру сборки мусора для удаления устаревших объектов (то есть объектов,
которые более недоступны из Lua).
Сборщик мусора обрабатывает все объекты Lua: таблицы, данные типа userdata, функции, потоки и строки.
В Lua реализован инкрементный сборщик по принципу
пометить-очистить. Цикл работы сборщика мусора зависит от двух параметров: пауза сборки мусора и коэффициент шага сборки.
Паузой определяется время между запусками циклов сборки. Большие значения этого
параметра делают сборку мусора менее активной. Значения меньше 1 означают, что
между запусками циклов сборки паузы нет. При значении 2 сборщик перед следующим
запуском ждет удвоения объема использованой памяти.
Коэффициент шага сборки управляет скоростью сборки в зависимости от
интенсивности выделения памяти. Большие значения параметра ускоряют работу сборщика,
но при этом увеличивается размер каждого шага. Larger
values make the collector more aggressive but also increase the size of each
incremental step.Значения
меньше 1 делают сборщик медленным и могут привести к тому, что цикл сборки никогда
не закончится. По умолчанию используется значение 2, в этом случае сборщик работает
вдвое быстрее процесса выделения памяти.
Вы можете менять эти параметры посредством вызова lua_gc
в C или collectgarbage в Lua. В обоих случаях в качестве
аргументов берутся проценты (т.е. аргумент 100 означает значение параметра 1).Этими
функциями вы можете непосредственно управлять сборкой (например, останавливать
ее или рестартовать).
|