lua内存回收机制,,简单讲解Lua中的垃圾回收机制

lua内存回收机制,,简单讲解Lua中的垃圾回收机制

本文主要介绍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解释器自动执行。

显然,如果我们需要使用垃圾收集器,我们可以改变这些函数的行为。这些特性为开发人员处理复杂情况提供了一点额外的能力。根据不同的内存要求,程序类型可以使用,也可以不使用。而是应用程序的内存使用和程序本身,以避免在部署后对结果进行不必要的检查。

lua内存回收机制,,简单讲解Lua中的垃圾回收机制