Quando você require
cria um módulo em Lua, uma cópia é armazenada em package.loaded
.
Mesmo se você não for usar o módulo novamente, ele pode ser acessado globalmente, evitando a coleta de lixo.
Embora você sempre possa definir a package.loaded
entrada como nil
, por que não fazer isso acontecer automaticamente, como o resto do gerenciamento de memória de Lua?
A solução é tornar os valores package.loaded
fracos, permitindo que sejam coletados quando não forem usados em nenhum outro lugar:
setmetatable(package.loaded, {__mode = "v"})