• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > 简单讲解Lua中的垃圾回收机制

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

作者:goldensun 字体:[增加 减小] 来源:互联网

goldensun 通过本文主要向大家介绍了lua for循环机制,lua热更新机制,lua 垃圾回收,lua 强制回收,lua文件解密等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

 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"): 停止垃圾收集器,如果它的运行。

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

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))</div>

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

20.9853515625
0
19.4111328125</div>

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

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

</div>

您可能想查找下面的文章:

  • 简单讲解Lua中的垃圾回收机制
  • Lua中for循环语句的使用教程
  • Lua中的捕获机制和转换技巧介绍

相关文章

  • 详解Lua中的if语句的使用方法
  • Lua中的loadfile、dofile、loadstring、require用法实例
  • LUA string库使用小结
  • Lua中关于元方法的一些知识点小结
  • Lua的迭代器使用中应该避免的问题和技巧
  • Lua中的一些常用函数库实例讲解
  • lua+love2d制作的2048游戏
  • Lua教程(十二):面向对象编程
  • Lua中基本的数据类型、表达式与流程控制语句讲解
  • 实现Lua中数据类型的源码分享

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua学习笔记之表和函数
    • Lua中的文件I/O操作教程
    • Lua教程(十二):面向对象编程
    • Lua table的concat方法使用实例
    • Lua的堆栈浅析
    • Lua中访问table里函数的方法示例
    • Lua时间转化的几个小例子
    • Lua中的元方法__newindex详解
    • Lua判断数据类型的方法
    • lua中操作json数据的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有