Сборщик мусора в языке программирования Lua работает по принципу mark-and-sweep. 2 Он сначала начинает с набора рутов, помечает все доступные объекты в куче как «Живые», а затем, проходя через кучу, выявляет все объекты, которые не были помечены как «живые», и освобождает их память. 2
Одна из ключевых особенностей сборщика мусора в Lua — инкрементность. 2 Он может распределить свою работу на несколько разных вызовов, что позволяет скриптам работать даже в то время, когда сборщик мусора выполняет работу. 2
Ещё одна особенность — разделение объектов на «Старые» и «Молодые» в зависимости от их возраста. 2 Молодые объекты с большей вероятностью являются мусором, поэтому сборщик мусора может очищать их чаще, чтобы избежать фрагментации памяти. 2 А вот старые объекты освобождаются реже, так как они долгоживущие, и шанс того, что они окажутся мусором, гораздо меньше. 2
Сбор мусора в Lua происходит автоматически при достижении определённых условий. 3 Однако иногда может возникнуть необходимость вручную вызвать сбор мусора в конкретных местах программы или в определённые моменты времени. 3 Для этого можно воспользоваться функцией «collectgarbage». 23