当前位置: 代码网 > it编程>前端脚本>Lua > 简单讲解Lua中的垃圾回收机制

简单讲解Lua中的垃圾回收机制

2024年05月18日 Lua 我要评论
lua使用基于被内置在lua某些算法的垃圾收集自动内存管理。可以自动内存管理的结果,作为一个开发者: 没有必要担心的对象分配内存。 无需释放他们时,不再需要可将其设置为nil。lua使用运行不

 lua使用基于被内置在lua某些算法的垃圾收集自动内存管理。可以自动内存管理的结果,作为一个开发者:

  •     没有必要担心的对象分配内存。
  •     无需释放他们时,不再需要可将其设置为nil。

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"): 运行垃圾回收的一步。第二个参数是越大step也会变大。在收集的垃圾将返回true,如果触发的步骤是一个垃圾收集周期的最后一步。
  •     collectgarbage("stop"): 停止垃圾收集器,如果它的运行。

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

当我们运行上面的程序,会得到下面的输出。请注意,这样的结果会有所不同,由于在操作系统中,lua自动内存管理功能可能也有差异。

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

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

(0)

相关文章:

  • 把Lua编译进nginx步骤方法

    把Lua编译进nginx步骤方法

    lua编译进nginx的方法1、先安装lua-jit,网上说也可以下载lua,不过lua-jit效率比较高,地址:http://luajit.org/downl... [阅读全文]
  • 在Lua中使用模块的基础教程

    在Lua中使用模块的基础教程

    什么是模块?模块是一个像,可以使用需要加载并有包含表中的单个全局命名的库。该模块可包含若干函数和变量。所有这些函数和变量被包裹在以它作为一个命名空间的表。也是一... [阅读全文]
  • 使用Lua编写Nginx服务器的认证模块的方法

    使用Lua编写Nginx服务器的认证模块的方法

    过去两天里,我解决了一个非常有趣的问题。我用一个nginx服务器作为代理,需要能够向其中添加一个认证层,使其能够使用外部的认证源(比如某个web应用)来进行验证... [阅读全文]
  • 浅析Lua中的迭代器

    浅析Lua中的迭代器

    迭代器是一种结构,使能够遍历所谓的集合或容器中的元素。在lua中,这些集合通常是指那些用于创建各种数据结构,如数组表。一般对于迭代器一个通用的迭代器提供的键值对... [阅读全文]
  • Lua和Nginx结合使用的超级指南

    Lua和Nginx结合使用的超级指南

    nginx作为api代理有很多原因说明你为什使用nginx作为api代理。首先因为他是开源的;其次,nginx有大量的安装基础,他背后有一个强大的社区支持,在性... [阅读全文]
  • 详解Lua中的数组概念知识

    详解Lua中的数组概念知识

    数组是有序的对象的装置,它可以是包含含有多个行和列的行或多维阵列的集合的单个二维数组。在lua中,数组是使用索引表与整数实现的。数组的大小是不固定的,它可以增长... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com