Lua使用自动内存管理,该管理使用基于Lua内置的某些算法的垃圾回收。
垃圾收集器暂停
垃圾收集器暂停用于控制垃圾收集器之前需要等待多长时间; Lua的自动内存管理再次调用它。值小于100意味着Lua将不等待下一个周期。同样,此值的较高值将导致垃圾收集器的运行速度变慢。值为200,表示收集器在开始新的循环之前等待使用的总内存增加一倍。因此,根据应用程序的性质和速度,可能需要更改此值以在Lua应用程序中获得最佳性能。
垃圾收集器函数
作为开发人员,无涯教程确实可以控制Lua中的自动内存管理。为此,有以下方法。
collectgarbage(" collect") - 运行一个完整的垃圾回收周期。
collectgarbage(" count") - 返回程序当前使用的内存量(以千字节为单位)。
collectgarbage(" restart") - 如果垃圾收集器已停止,则会重新启动它。
collectgarbage(" setpause") - 将作为第二参数除以100的值设置为垃圾收集器暂停变量。
collectgarbage(" setstepmul") - 将作为第二参数除以100的值设置为垃圾步骤乘数变量。
collectgarbage(" step") - 运行一步垃圾收集。第二个参数越大,此步骤将越大。如果触发的步骤是垃圾收集周期的最后一步,则收集垃圾将返回true。
collectgarbage(" stop") - 如果垃圾收集器正在运行,则将其停止。
下面显示了一个使用垃圾收集器示例的简单示例。
mytable={"apple", "orange", "banana"}print(collectgarbage("count"))mytable=nilprint(collectgarbage("count"))print(collectgarbage("collect"))print(collectgarbage("count"))
当运行上面的程序时,将得到以下输出。请注意,此输出将因操作系统类型以及Lua的自动内存管理函数的不同而有所不同。
23.1455078125 149 23.2880859375 295 0 22.37109375 380
您可以在上面的程序中看到,一旦完成垃圾回收,它就会减少所使用的内存。但是,这不是强制性的。即使无涯教程不调用它们,它也会在预定时间后由Lua解释器在以后的阶段自动执行。
Lua - 垃圾回收 - 无涯教程网无涯教程网提供Lua使用自动内存管理,该管理使用基于Lua内置的某些算法的垃圾回收。 垃圾收集器暂停...https://www.learnfk.com/lua/lua-garbage-collection.html