English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lua utiliza gestión de memoria automática. Esto significa que no tienes que preocuparte por cómo asignar memoria a los objetos recién creados, ni por considerar cómo liberar la memoria ocupada por los objetos cuando ya no se utilizan.
Lua ejecutó unrecolector de basurapara recoger todosobjeto muerto ((que en Lua no es posible acceder de nuevo) para completar el trabajo de gestión de memoria automática. En Lua, toda la memoria utilizada, como: cadenas, tablas, datos de usuario, funciones, hilos, estructuras internas, etc., están sujetas a gestión automática.
Lua implementa un marcador incremental-Recolector de escaneo. Usa estos dos números para controlar el ciclo de recolección de basura: la tasa de interrupción del recolector de basura y la tasa de paso del recolector de basura. Ambos números se utilizan en porcentajes (por ejemplo: valores 100 en el interior representa 1 )
La tasa de interrupción del recolector de basura controla cuánto tiempo debe esperar el recolector antes de comenzar un nuevo ciclo. Aumentar este valor reducirá la activación del recolector. Cuando este valor es 100 cuando es pequeño, el recolector no espera antes de comenzar un nuevo ciclo. Configure este valor a 200, lo que haría que el recolector espere hasta que el uso total de memoria alcance el doble de lo anterior antes de comenzar un nuevo ciclo.
La tasa de paso del recolector de basura controla la velocidad de funcionamiento del recolector en comparación con la velocidad de asignación de memoria. Aumentar este valor no solo hace que el recolector sea más activo, sino que también aumenta la longitud de cada paso incremental. No configure este valor menor de 100, en ese caso, el recolector de basura trabaja tan lentamente que nunca terminará un ciclo. El valor predeterminado es 200, esto significa que el recolector de basura trabaja a la "velocidad de dos veces" de la asignación de memoria.
si configuras la tasa de paso a un número muy grande (más grande de lo que tu programa puede usar en bytes) 10%%), el comportamiento del recolector de basura es como un stop-the-recolector de mundo. Luego, si configuras la tasa de interrupción en 200, el comportamiento del recolector de basura es como en versiones anteriores de Lua: cada vez que el uso de memoria de Lua se duplica, se realiza una recolección completa.
Lua proporciona las siguientes funcionescollectgarbage ([opt [, arg]])Usado para controlar la gestión automática de memoria:
collectgarbage("collect"): Hacer un ciclo de reciclaje de basura completo. A través de los parámetros opt, proporciona un grupo de diferentes funciones:
collectgarbage("count"): Regresar la cantidad total de memoria utilizada por Lua en kilobytes. Este valor tiene una parte decimal, por lo que solo se necesita multiplicar 1024 Se puede obtener el número exacto de bytes utilizados por Lua (a menos que sobrepase el límite).
collectgarbage("restart"): Reiniciar la ejecución automática del colector.
collectgarbage("setpause"): Establecer arg como la tasa de pausa del colector. Regresar al valor anterior de la tasa de pausa.
collectgarbage("setstepmul"): Regresar al valor anterior de la tasa de paso.
collectgarbage("step"): Ejecutar el colector de basura paso a paso. El paso "tamaño" se controla por arg. Al传入 0, el colector avanza un paso (indivisible). Al ingresar un valor no cero, el colector recicla el equivalente a la cantidad de memoria (K bytes) que Lua asigna. Si el colector termina un ciclo, regresará true.
collectgarbage("stop"): Detener la ejecución del colector de basura. Antes de reiniciar, el colector solo se ejecutará debido a llamadas explícitas.
A continuación, se muestra un ejemplo simple de reciclaje de basura:
mytable = {"apple", "orange", "banana"} print(collectgarbage("count")) mytable = nil print(collectgarbage("count")) print(collectgarbage("collect")) print(collectgarbage("count"))
Ejecutar el programa siguiente, el resultado será como sigue (tener en cuenta los cambios en el uso de la memoria):
20.9560546875 20.9853515625 0 19.4111328125