Noções básicas do coletor de lixo do Lua
Veja como funciona o GC incremental do Lua: marcação e varredura, limites e collectgarbage().
Noções básicas do coletor de lixo do Lua é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
O que é a coleta de lixo?
Lua usa um coletor de lixo automático para recuperar a memória ocupada por objetos (tabelas, cadeias de caracteres e fechamentos) que não são mais alcançáveis a partir de nenhuma raiz.
Algoritmo de marcação e varredura
O coletor de lixo de Lua usa um algoritmo incremental de marcação e varredura. Ele marca todos os objetos alcançáveis a partir das raízes e, em seguida, varre (libera) os objetos não marcados.
Coleta incremental
O coletor de lixo é executado em pequenos incrementos intercalados com o programa. Isso evita longos períodos de pausa. A quantidade de trabalho por incremento é controlada pelos parâmetros de etapa do coletor de lixo.
Função collectgarbage
collectgarbage(opt, arg) controla diretamente o coletor de lixo.
collectgarbage("collect") -- run a full GC cycle
collectgarbage("stop") -- stop automatic GC
collectgarbage("restart") -- restart automatic GC
print(collectgarbage("count")) -- KB of memory in useParâmetros do coletor de lixo
collectgarbage("setpause", n) define a pausa entre os ciclos do coletor de lixo (200 = duplica a memória antes do próximo ciclo). "setstepmul" controla a velocidade do coletor de lixo.
collectgarbage("setpause", 200) -- default
collectgarbage("setstepmul", 200) -- defaultReferências fracas e coleta de lixo
Normalmente, uma referência mantém um objeto ativo. Uma referência fraca não faz isso — o coletor de lixo pode coletar o objeto mesmo que uma tabela fraca aponte para ele.
Coletor de lixo geracional (Lua 5.4)
Lua 5.4 introduziu um modo opcional de coletor de lixo geracional. Objetos jovens são coletados com frequência; objetos antigos, com menos frequência. Alterne o modo com collectgarbage("generational").
Gatilhos de pressão de memória
O coletor de lixo é executado automaticamente quando o uso de memória ultrapassa um limite (definido pela pausa). Alocar muitas tabelas temporárias aumenta a pressão sobre o coletor de lixo e pode deixar o programa mais lento.
Reduzindo a pressão sobre o coletor de lixo
- Reutilize tabelas em vez de alocar novas.
- Evite criar muitos fechamentos de curta duração em laços intensivos.
- Pré-aloque matrizes de tamanho conhecido.
Internação de cadeias de caracteres
Lua interna todas as cadeias de caracteres — cadeias idênticas compartilham um único objeto. Isso significa que a criação de uma cadeia tem custo O(n) de hash, mas a comparação tem custo O(1). Cadeias curtas são muito baratas.
Finalizadores (__gc)
Tabelas podem ter um metamétodo __gc chamado pelo coletor de lixo antes que o objeto seja liberado. Isso é útil para liberar recursos externos, como identificadores de arquivos ou ponteiros C.
Pergunta sobre o coletor de lixo
O que collectgarbage("count") retorna?
Recapitulação: conceitos básicos do coletor de lixo de Lua
O coletor de lixo incremental de marcação e varredura de Lua recupera automaticamente a memória inacessível. Use collectgarbage para monitorar e controlar a coleta. Reduza a pressão reutilizando tabelas e evitando alocações excessivas em trechos críticos.
Perguntas Frequentes
A aula “Noções básicas do coletor de lixo do Lua” é grátis?
Sim — o texto completo de “Noções básicas do coletor de lixo do Lua” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Noções básicas do coletor de lixo do Lua”?
Veja como funciona o GC incremental do Lua: marcação e varredura, limites e collectgarbage(). Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Noções básicas do coletor de lixo do Lua”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Noções básicas do coletor de lixo do Lua
- Chaves e valores fracos
- Finalizadores com __gc
- Evitando vazamentos de memória