Lua垃圾收集

Lua使用基于被内置在Lua某些算法的垃圾收集自动内存管理。能够自动内存管理的结果,做为一个开发者:html

  • 没有必要担忧的对象分配内存。算法

  • 无需释放他们时,再也不须要可将其设置为nil。 app

Lua使用运行不时收集死的对象时,再也不从Lua程序中访问垃圾收集器。函数

全部对象,包括表,用户数据,函数,线程,字符串等受自动内存管理。 Lua使用增量标记和使用两个数字来控制其垃圾回收周期即垃圾收集暂停和垃圾收集器的步骤事半功倍清除收集器。这些值是在百分比和100的值是常等于1。性能

垃圾收集暂停

垃圾收集停顿被用于控制多长时间的垃圾收集器须要等待,以前;它是由Lua的自动内存管理再次调用。数值低于100就意味着Lua中不会等待下一个周期。此值的相似地较高的值将致使垃圾收集器是缓慢的而且性质上较不积极。200表示该集合等待的总内存在使用中要开始一个新的周期开始前的两倍。所以,根据不一样的性质和应用的速度,有可能要求改变该值来得到在Lua应用的最佳性能。spa

垃圾收集器的步骤事半功倍

这一步乘数控制垃圾收集在Lua程序的内存分配的相对速度。较大的步长值将致使垃圾收集器要更侵蚀性,同时也提升了垃圾收集的每一个增量步的步长大小。值小于100可能常常致使避免垃圾收集器没有完成其周期和其通常不是优选的。默认值是200,这意味着垃圾收集器运行的两倍的内存分配的速度。操作系统

垃圾收集器函数

做为开发人员,咱们确实有过让Lua自动内存管理。为此,有如下几种方法。线程

  • collectgarbage("collect"): 执行垃圾回收的一个完整周期。rest

  • collectgarbage("count"): 返回当前使用的千字节的程序内存量code

  • collectgarbage("restart"): 若是垃圾收集器已经中止,将从新启动它。

  • collectgarbage("setpause"): 设置给定为第二参数除以100至垃圾收集器暂停变量的值。它的用途是做为讨论的一点上面。

  • collectgarbage("setstepmul"): 设置给定为第二参数除以100到垃圾步骤乘数的变量的值。它的用途是做为讨论的一点上面。

  • collectgarbage("step"): 运行垃圾回收的一步。第二个参数是越大step也会变大。在收集的垃圾将返回true,若是触发的步骤是一个垃圾收集周期的最后一步。

  • collectgarbage("stop"): 中止垃圾收集器,若是它的运行。

使用垃圾收集器例如一个简单的例子以下所示。

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

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

当咱们运行上面的程序,会获得下面的输出。请注意,这样的结果会有所不一样,因为在操做系统中,Lua自动内存管理功能可能也有差别。

20.9560546875
20.9853515625
0
19.4111328125

能够在上面的程序看出,一旦垃圾回收完成后,既能够减小使用内存。可是它也不是强制性的调用。即便咱们不给调用,它也会自动在后一阶段在预约时间以后由Lua解释器执行。

显然咱们能够改变,若是须要使用垃圾收集器的这些功能行为。这些功能提供了一点额外的能力,为开发者处理复杂状况。根据不一样的内存须要执行程序类型,可能会或可能不会使用此功能。但在应用程序的内存使用状况,并在程序自己,以免在部署后不想要对结果进行检查。

相关文章
相关标签/搜索