Latest web development tutorials

coleta de lixo Lua

Lua usa gerenciamento automático de memória. Isso significa que você não precisa se preocupar com o objeto recém-criado para fora como alocar a memória, eles não consideram como eles liberar a memória ocupada depois que o objeto não está mais sendo usado.

Lua está executando umcoletor de lixo para recolher todos os objetos mortos(ou seja, os objetos não podem ser acessados na Lua) para executar o gerenciamento automático de memória. Lua é usada em toda a memória, tais como: corda, tabelas, os dados do usuário, funções, linhas, estrutura interna, etc., estão sujeitos a gestão automática.

Lua implementa uma marca incremental - coletor Scan. Ele usa dois números para controlar o ciclo de coleta de lixo: lixo taxa de coleta de lixo coletor e ampliação stepping intermitente. Ambos os valores se utilizar a percentagem de unidades (por exemplo: um valor de 100 na representação interna 1).

A coleta de lixo controla de forma intermitente a taxa precisa coletar antes de abrir um novo ciclo de esperar muito tempo. O aumento deste valor irá reduzir o entusiasmo do coletor. Quando este valor é menos do que 100, quando o colector antes de abrir o novo ciclo não terá que esperar. Defina este valor como 200 irá permitir que colectores de esperar até duas vezes o uso de memória total atinge antes do início de um novo ciclo.

O passo ampliação coletor de lixo controla a velocidade de operação do coletor em relação à taxa de velocidade de alocação de memória. Isto não só irá aumentar o valor do colector mais agressiva, mas também aumentar o comprimento de cada passo incremental. Não defina este valor para ser inferior a 100, por isso, se o coletor de trabalhar lento por isso sempre tanta coisa para fazer um loop. O valor padrão é 200, o que significa que a alocação de memória para o coletor do trabalho "double" velocidade.

Se você pisar ampliação para um número muito grande (o número de bytes que você pode ser usado no programa também é 10% maior), o coletor age como um coletor de stop-the-world. Então, se você colocar a taxa intermitente definido para 200, o comportamento do coletor e passado versões Lua do mesmo: cada memória usada por Lua dobrou, para fazer uma coleção completa.


função de coletor de lixo

Lua fornece as seguintes funçõescollectgarbage ([opt [, arg] ]) é usado para controlar o gerenciamento automático de memória:

  • collectgarbage ( "recolher"): faça um ciclo de coleta de lixo completa.O opt parâmetro que fornece um conjunto diferente de funções:

  • collectgarbage ( "contagem"): K para retornar o número de bytes quantidade total de memória usada por Lua.Este valor tem uma parte fracionária, só precisamos de multiplicar 1024 você pode obter o número exato de bytes usada por Lua (a não ser ultrapassado).

  • collectgarbage ( "restart"): Reinicie o coletor de lixo é executado automaticamente.

  • collectgarbage ( "setpause"): Defina a frequência intermitente coletor arg (veja sect; 2.5).Voltar para o valor anterior da taxa intermitente.

  • collectgarbage ( "setstepmul"): Retorna o valor anterior da ampliação etapa.

  • collectgarbage ( "step"): uma etapa executar o coletor de lixo.Passo "tamanho" por um controle arg. 0 de entrada de passo do coletor (indivisível) etapa. Incoming valor diferente de zero, coletor para recolher a alocação equivalente Lua destes múltipla (bytes K) do trabalho de memória. Se o fim do coletor de um ciclo retornará verdadeiro.

  • collectgarbage ( "stop"): Parar as execuções coletor de lixo.Antes de ligar para o reinício, o coletor só por causa de uma chamada explícita para ser executado.

A seguir demonstra um exemplo simples coleta de lixo:

mytable = {"apple", "orange", "banana"}

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

O programa acima, os resultados de saída são as seguintes (mudança nota no uso de memória):

20.9560546875
20.9853515625
0
19.4111328125