本文主要介绍Lua中的垃圾收集机制。自动垃圾收集是Lua的重要特性之一,有需要的朋友可以参考一下。
Lua使用基于Lua内置的一些算法的垃圾收集来自动管理内存。可能是自动内存管理的结果,作为开发人员:
不需要担心为对象分配内存。
当不再需要它们时,它们可以被设置为零。
当Lua使用运行时不时地收集死对象时,它不再从Lua程序访问垃圾收集器。
所有对象,包括表、用户数据、函数、线程、字符串等。受到自动内存管理的影响。Lua使用增量标记和两个数字来控制其垃圾收集周期,即垃圾收集暂停和垃圾收集器步骤,以达到事半功倍的效果。这些值以百分比表示,100的值始终等于1。
垃圾收集暂停
垃圾收集暂停用于控制垃圾收集器需要等待多长时间;它被Lua的自动内存管理再次调用。低于100的值意味着下一个周期不会在Lua中等待。这个值的一个类似的高值将导致垃圾收集器速度慢,并且本质上不太活跃。200意味着等待该集合的总内存是新周期开始前的两倍。因此,根据不同的属性和应用速度,可以更改该值以获得Lua中的最佳性能。
垃圾收集器的步骤事半功倍
这个步长乘数控制Lua程序内存分配中垃圾收集的相对速度。更大的步长会使垃圾收集器更积极,也会增加垃圾收集的每个增量步骤的步长。小于100的值通常会导致垃圾收集器无法完成其循环,因此通常不是首选值。默认值是200,这意味着垃圾收集器的运行速度是内存分配的两倍。
垃圾收集器函数
作为开发人员,我们确实让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=nil
print(collectgarbage('count '))
print(collectgarbage('collect '))
print(collectgarbage('count '))
当我们运行上面的程序时,我们将得到下面的输出。请注意,这个结果会有所不同,因为Lua的自动内存管理功能在操作系统中也可能有所不同。
复制的代码如下:20.5656666666667
20.9853515625
0
19.4111328125
从上面的程序可以看出,一旦垃圾收集完成,就可以减少内存的使用。但这也不是一个强制性的要求。即使我们不调用它,它也会在后期预定时间后被Lua解释器自动执行。
显然,如果我们需要使用垃圾收集器,我们可以改变这些函数的行为。这些特性为开发人员处理复杂情况提供了一点额外的能力。根据不同的内存要求,程序类型可以使用,也可以不使用。而是应用程序的内存使用和程序本身,以避免在部署后对结果进行不必要的检查。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。