0Pricing
Lua Academy · Урок

Основы сборщика мусора Lua

Изучите работу инкрементального сборщика мусора Lua: маркировку и очистку, пороги и collectgarbage().

«Основы сборщика мусора Lua» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Что такое сборка мусора?

Lua использует автоматический сборщик мусора, чтобы освобождать память, занятую объектами (таблицами, строками, замыканиями), которые больше недоступны ни из одного корневого объекта.

Алгоритм пометки и очистки

Сборщик мусора Lua использует инкрементальный алгоритм пометки и очистки. Сначала он помечает все доступные объекты, начиная с корневых, а затем очищает (освобождает) непомеченные объекты.

Инкрементальная сборка

Сборщик мусора работает небольшими шагами, перемежающимися с выполнением программы. Это предотвращает длительные паузы. Объём работы за один шаг задаётся параметрами шага сборки мусора.

Функция collectgarbage

collectgarbage(opt, arg) напрямую управляет сборщиком мусора.

collectgarbage("collect")      -- run a full GC cycle
collectgarbage("stop")         -- stop automatic GC
collectgarbage("restart")      -- restart automatic GC
print(collectgarbage("count")) -- KB of memory in use

Параметры сборщика мусора

collectgarbage("setpause", n) задаёт паузу между циклами сборки мусора (200 = объём памяти удваивается до следующего цикла). "setstepmul" управляет скоростью сборки мусора.

collectgarbage("setpause", 200)    -- default
collectgarbage("setstepmul", 200)  -- default

Слабые ссылки и сборка мусора

Обычно ссылка сохраняет объект. Слабая ссылка этого не делает: сборщик мусора может удалить объект, даже если на него указывает слабая таблица.

Поколенческая сборка мусора (Lua 5.4)

В Lua 5.4 появился необязательный поколенческий режим сборки мусора. Молодые объекты собираются часто, старые — реже. Переключить режим можно с помощью collectgarbage("generational").

Условия запуска сборки мусора

Сборщик мусора запускается автоматически, когда использование памяти превышает порог, заданный параметром pause. Выделение множества временных таблиц усиливает нагрузку на сборщик и может замедлить программу.

Снижение нагрузки на сборщик мусора

  • Повторно используйте таблицы вместо создания новых.
  • Избегайте создания множества короткоживущих замыканий в горячих циклах.
  • Заранее выделяйте массивы известного размера.

Интернирование строк

Lua интернирует все строки: одинаковые строки используют один объект. Поэтому создание строки требует хеширования за O(n), а сравнение выполняется за O(1). Короткие строки обходятся очень дёшево.

Финализаторы (__gc)

У таблиц может быть метаметод __gc, вызываемый сборщиком мусора перед освобождением объекта. Это удобно для освобождения внешних ресурсов, например дескрипторов файлов или указателей C.

Вопрос о сборке мусора

Что возвращает collectgarbage("count")?

Повторение: основы сборки мусора в Lua

Инкрементальная сборка мусора Lua автоматически освобождает недоступную память с помощью пометки и очистки. Используйте collectgarbage, чтобы отслеживать сборку и управлять ею. Снижайте нагрузку, повторно используя таблицы и избегая чрезмерного выделения памяти на часто выполняемых участках.

Часто задаваемые вопросы

Урок «Основы сборщика мусора Lua» бесплатный?

Да — полный текст урока «Основы сборщика мусора Lua» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Основы сборщика мусора Lua»?

Изучите работу инкрементального сборщика мусора Lua: маркировку и очистку, пороги и collectgarbage(). Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы сборщика мусора Lua»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы сборщика мусора Lua
  2. Слабые ключи и слабые значения
  3. Финализаторы с __gc
  4. Предотвращение утечек памяти
← Назад к Lua Academy