Lua 垃圾回收

news2024/11/17 17:42:07

Lua 垃圾回收

参考至菜鸟教程。

  Lua 采用了自动内存管理。 这意味着你不用操心新创建的对象需要的内存如何分配出来, 也不用考虑在对象不再被使用后怎样释放它们所占用的内存。

  Lua运行了一个垃圾收集器来收集所有死对象(即在Lua中不可能再访问到的对象)来完成自动内存管理的工作。Lua中所有用到的内存,如:字符串、表、用户数据、函数、线程、 内部结构等都服从自动管理。

  Lua实现了一个增量标记-扫描收集器。它使用这两个数字来控制垃圾收集循环:垃圾收集器间歇率和垃圾收集器步进倍率。这两个数字都使用百分数为单位 (例如:值 100 在内部表示1)。

  垃圾收集器间歇率控制着收集器需要在开启新的循环前要等待多久。 增大这个值会减少收集器的积极性。当这个值比 100 小的时候,收集器在开启新的循环前不会有等待。 设置这个值为 200 就会让收集器等到总内存使用量达到 之前的两倍时才开始新的循环。

  垃圾收集器步进倍率控制着收集器运作速度相对于内存分配速度的倍率。 增大这个值不仅会让收集器更加积极,还会增加每个增量步骤的长度。 不要把这个值设得小于 100 , 那样的话收集器就工作的太慢了以至于永远都干不完一个循环。 默认值是 200 ,这表示收集器以内存分配的"两倍"速工作。

  如果你把步进倍率设为一个非常大的数字 (比你的程序可能用到的字节数还大 10% ), 收集器的行为就像一个 stop-the-world 收集器。 接着你若把间歇率设为 200 , 收集器的行为就和过去的 Lua 版本一样了: 每次 Lua 使用的内存翻倍时,就做一次完整的收集。

垃圾回收器函数

  Lua 提供了以下函数**collectgarbage ([opt [, arg]])**用来控制自动内存管理:

  • collectgarbage(“collect”): 做一次完整的垃圾收集循环。通过参数 opt 它提供了一组不同的功能。
  • collectgarbage(“count”): 以 K 字节数为单位返回 Lua 使用的总内存数。 这个值有小数部分,所以只需要乘上 1024 就能得到 Lua 使用的准确字节数(除非溢出)。
  • collectgarbage(“restart”): 重启垃圾收集器的自动运行。
  • collectgarbage(“setpause”): 将 arg 设为收集器的间歇率。 返回 间歇率 的前一个值。
  • collectgarbage(“setstepmul”): 返回 步进倍率 的前一个值。
  • collectgarbage(“step”): 单步运行垃圾收集器。 步长"大小"由 arg 控制。 传入 0 时,收集器步进(不可分割的)一步。 传入非 0 值, 收集器收集相当于 Lua 分配这些多(K 字节)内存的工作。 如果收集器结束一个循环将返回 true 。
  • collectgarbage(“stop”): 停止垃圾收集器的运行。 在调用重启前,收集器只会因显式的调用运行。

  以下演示了一个简单的垃圾回收实例:

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

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

输出结果:

效果图

注意点

  • collectgarbage(“setpause”, 200) : 内存增大 2 倍(200/100)时自动释放一次内存 (200 是默认值)。

  • collectgarbage(“setstepmul”, 200) :收集器单步收集的速度相对于内存分配速度的倍率,设置 200 的倍率等于 2 倍(200/100)。(200 是默认值)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新能源——充电控制

一、交流充电——慢充 交流充电:电网输入给车辆的交流电,220V AC单向电或380V AC三相电。 车载充电机:交流电转化为直流电 二、直流充电——快充 三、充电模式 模式1——标准插座 模式2——带有交流电动汽车供电设备的标准插座 模式3——…

idea maven打包编译报错 java.lang.AssertionError: input.getType

今天使用idea打包编译maven项目,出现如下报错 构建报错时,最先显示的是这个报错。查了一圈下来,我的配置是没有问题的。 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project…

WackoPicko通关教程

7.WackoPicko通关教程 首先进入网站&#xff0c;整体浏览网页&#xff0c;看网站的功能点 本着见框就插的原则&#xff0c;我们可以在搜索框进行查询 构造payload&#xff1a; <script>alert(/xss/)</script> 查看网站&#xff0c;成功触发弹窗 之后进入留言板…

45.Isaac教程--地图编辑器

地图编辑器 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录地图编辑器运行地图编辑器编辑现有地图层添加新的航点或多边形修改现有航点和多边形创建一个新的 WaypointMapLayer创建一个新的 PolygonMapLayer删除图层启用/禁用图层地图编辑…

【Python】request.session的cookie如何导入aiohttp._cookie_jar

request.session的cookie导入aiohttp._cookie_jar的教程 1.起因 我的 kook-valorant-bot 使用了两个开源库&#xff0c;用于riot账户的登录并获取token 其中最主要用的是基于aiohttp的floxay/python-riot-auth&#xff0c;但这个仓库不支持2fa用户&#xff08;开启了邮箱双重…

1999—2019年地级市人口变动数据(增长率\出生人口\死亡人口)

人口数据是我们在各项研究中最常使用的数据&#xff0c;而统计年鉴是人口数据的重要来源&#xff01;之前我们介绍过基于2000-2021年《中国城市统计年鉴》整理的1999年—2020年全国地级市的人口指标&#xff0c;包括户籍人口、常住人口、户数等指标&#xff08;可查看之前发布的…

史上最强strace命令详解

系列文章目录 文章目录系列文章目录前言一、strace是什么&#xff1f;二、strace怎么用总结前言 一、strace是什么&#xff1f; 按照 strace 官网的描述&#xff0c;strace 是一个可用于诊断、调试和教学的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互&…

网络编程 -- socket 套接字

文章目录socket 套接字UDP 和 TCP 区别1. 有连接 VS 无连接2. 可靠传输 VS 不可靠传输3. 面向字节流 VS 面向数据报4. 全双工UDP 数据报套接字编程TCP 数据报套接字编程socket 套接字 本文就来学习一下 网络编程&#xff0c; 既然谈到了网络编程&#xff0c;那么要如何进行呢 &…

三层交换机报文转发过程

如图所示&#xff0c;假如主机A想访问主机B&#xff0c;首先主机A会将自己的IP地址和子网掩码做与操作,得出网路地址(如:Host-A的IP地址100.1.1.2与自身掩码255.255.255.0做与操作后,得到的网络号是100.1.1.0).然后判断目的IP地址(即Host-B的IP地址)与自己的网络地址是不是在同…

Linux下查看多线程进程下的线程

Linux内核在执行程序时&#xff0c;将所有运行时信息写到了/proc/{pid} 目录下。下面我们以以下python的2线程程序为例&#xff0c;详细说一下Linux系统下如何查看1&#xff0c;某个进程有几个线程2&#xff0c;某个进程里具体有哪些线程我们通过如下代码&#xff08;threaddem…

1606_PC汇编语言_简介以及8086系列的平台信息梳理

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 看得出来外国高校教育中的质量&#xff0c;一个课程涉及到的资料特别庞大。我感觉掌握起来比较缓慢吃力&#xff0c;当然&#xff0c;这不排除语音障碍带来的影响。…

【选择IT培训机构时,我们应该注意的点有哪些?】

之前写过一篇关于是否还有靠谱IT培训机构的内容&#xff0c;很多小伙伴也发表了各自不同的看法&#xff0c;有赞同&#xff0c;有反对&#xff0c;还有讽刺的。其中不免有培训的受害者&#xff0c;想要培训的人&#xff0c;恶意抹黑培训的人&#xff0c;也有少部分培训的受益者…

jenkins docker 部署-02

镜像说明 镜像ponylee/jenkins-centos7:v2.0基于镜像ponylee/jenkins-centos7:v1.0&#xff08;镜像ponylee/jenkins-centos7:v1.0基于jenkins/jenkins:lts-centos7-jdk8, 添加 git maven jdk8 等java部署常用的工具。同时改变运行用户jenkins为root&#xff0c;放大权限&#…

【GD32F427开发板试用】基于GD32F427的纳姆轮小车

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;Ljfly 目标&#xff1a; 做一个四轮驱动小车&#xff0c;实现通过GD32F427控制小车前进&#xff0c;后退&#xff0c;左移&#xff0c;右移&a…

一起自学SLAM算法:12.1 ros-navigation导航系统

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 可以说ros-navigation是ROS系统中最重要的组件之一&#xff0c;绝大部分自主移动机器人的导航功能都是基于ros-navigation导航系统实现的。下面将从原理分析、源码解读和安装与运行这3个方面展开讲解ros-navigat…

一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (一)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

拉伯证券|2023年净利“超十倍潜力股”揭秘

本年成绩有望暴增的个股有哪些&#xff1f; 2022年各首要指数调整较大&#xff0c;但2023年开年以来A股体现继续强势&#xff0c;三大股指到目前涨幅均超5%&#xff0c;创业板指更是大涨超10%&#xff0c;医药、消费、科技等赛道轮番体现。 外资也对A股进行新一轮的加仓调仓&a…

Redis学习笔记:慢查询,Pipeline,事务,乐观锁

本文是自己的学习笔记。主要参考资料如下&#xff1a; 马士兵 1、Redis的慢查询1.1、慢查询的相关参数1.1.1、设置阈值1.1.2、慢查询日志存储长度1.1.2.1、慢查询日志解析1.2、生产环境下慢查询的配置2、Pipeline2.1、简单的pipeline代码示例2.2、使用Pipeline的注意事项3、事务…

自己写的功能简单的 http server 文件下载服务器 http服务器

最近在项目中遇到过 通过ssh登录到某台机器A &#xff0c;然后 又从A机器上ssh到机器B 而B机器是没有外网功能&#xff0c;这个时候如果想从B机器上传文件到A机器上就很不好办了 由于B机器没有外网 很多工具软件都没有 原来是是用python 起的http服务器 但是B机器没有安装py…

Black Basta 勒索软件利用 QakBot 进行分发

自 2022 年 4 月投入运营以来&#xff0c;Black Basta 对全球近 50 家组织发起了攻击。攻击者使用了“双重勒索”策略&#xff0c;如果受害者不交付赎金就会被公开数据。 勒索团伙会不断改进攻击方式&#xff0c;最近研究人员发现 Black Basta 与银行木马 QakBot 勾结在一起&a…