lua自动回收机制gc的理解

news2024/9/25 15:24:34

在这里插入图片描述

gc主要回收哪些垃圾?

在 Lua 中,垃圾回收(garbage collection,简称 GC)机制主要用于回收动态分配的内存和关闭未关闭的文件句柄。具体来说,Lua 的 GC 机制主要用于回收以下类型的垃圾:

  1. 对象:Lua 中的对象包括表、函数、线程、用户数据等。当 Lua 程序创建一个对象时,它会在堆上动态分配一块内存来存储该对象。当这个对象不再被使用时,Lua 的 GC 机制会回收它占用的内存。

  2. 循环引用:在 Lua 中,如果一个对象中引用了另一个对象,而这个被引用的对象又引用了第一个对象,就会形成循环引用。这种情况下,如果没有垃圾回收机制,就会出现内存泄漏。Lua 的 GC 机制可以识别并回收这种循环引用的对象。

  3. 未关闭的文件句柄:当 Lua 程序打开一个文件时,它会创建一个文件句柄来管理该文件。如果程序没有显式地关闭该句柄,就会导致文件资源泄漏。Lua 的 GC 机制可以自动关闭未关闭的文件句柄,以释放文件资源。

Lua 的 GC 机制使用标记-清除算法(mark-and-sweep algorithm)来回收垃圾。在 GC 的标记阶段,GC 会遍历程序中的所有对象,并标记所有还在使用中的对象。在清除阶段,GC 会回收所有未被标记的对象,并释放它们占用的内存。

gc不需要用户管理

在 Lua 5.3 中,用户不需要显式地调用 GC 接口,Lua 虚拟机会自动进行垃圾回收。Lua 5.3 的 GC 机制是自适应的,它会根据程序的内存使用情况自动调整 GC 的频率和策略,以达到最优的垃圾回收效果。

Lua 5.3 提供了 collectgarbage 函数,可以用于手动触发 GC 或控制 GC 的行为。该函数接受一个字符串参数,用于指定 GC 的操作类型。例如,collectgarbage("collect") 可以手动触发一次完整的 GC,collectgarbage("count") 可以返回当前 Lua 程序使用的内存量等等。但是,在大多数情况下,用户不需要显式地调用 collectgarbage 函数,Lua 会自动进行垃圾回收,并根据程序的内存使用情况自动调整 GC 的行为,以达到最优的性能和效果。

需要注意的是,尽管 Lua 5.3 的 GC 机制是自动的,但是程序员仍然需要避免创建过多的临时对象和循环引用,以减少 GC 的开销。同时,如果程序中有大量的动态内存分配和释放操作,也可能会导致 GC 的频率过高,影响程序的性能。因此,在编写 Lua 程序时,需要注意内存管理和优化,以达到最优的性能和效果。

Lua 的 GC 机制是自动的,程序员不需要显式地调用 GC 函数。同时,Lua 也提供了一些 API 函数,例如 collectgarbage 函数,可以用于手动触发 GC 或控制 GC 的行为。

【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
在这里插入图片描述

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

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

相关文章

力扣日记剑指 Offer II 003

1. 题目 LeetCode 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 1.1 题意 计算 0 到 n 之间的每个数的二进制表示中 1 的个数 1.2 分析 看时间复杂度,O(32n)应该能过(也就是每个数一位一位去数1的个数),知道low-bit这个运…

插入排序代码

时间复杂度O(n)

开源中文医疗大模型

中文医疗大模型 中文医疗大模型是指通过利用自然语言处理技术和机器学习算法,在大量的医疗文本数据中预训练出来的模型。它可以实现对医疗信息的分类、摘要、问答系统、机器翻译等功能,是医疗行业中的重要工具。在医疗领域中,大规模语言模型&…

答应我,不会回答这五个问题,不要去面试好吗?

1、创建坐席组的功能模块,如何进行测试用例设计? 解答: 功能测试,使用等价类划分法去分析创建坐席的每个输入项的有效及无效类,同步考虑边界值去设计对应的测试用例: 先进行冒烟测试,正常创建…

CSS基础学习--17 布局 - 水平 垂直对齐

一、元素居中对齐 要水平居中对齐一个元素(如 <div>), 可以使用 margin: auto;。设置到元素的宽度将防止它溢出到容器的边缘。元素通过指定宽度&#xff0c;并将两边的空外边距平均分配&#xff1a; <!DOCTYPE html> <html> <head> <meta charset&q…

关于sub-gaussian 和 sub-exponential随机变量的集中不等式

Concentration inequalities under sub-Gaussian and sub-exponential conditions sub-guassian范数和sub-exponential范数&#xff1a; 如果 f k ( X ) f_{k}(X) fk​(X)为sub-gaussian随机变量&#xff0c;则有如下的定理&#xff1a; 应用&#xff1a; 1.向量值集中 2.…

Apache Doris 冷热分层技术如何实现存储成本降低 70%?|新版本特性

在数据分析的实际场景中&#xff0c;冷热数据往往面临着不同的查询频次及响应速度要求。例如在电商订单场景中&#xff0c;用户经常访问近 6 个月的订单&#xff0c;时间较久远的订单访问次数非常少&#xff1b;在行为分析场景中&#xff0c;需支持近期流量数据的高频查询且时效…

mysql索引优化系列(一)

一、不常见的索引失效场景 1、举例 还是之前的member会员记录表&#xff0c;往里面插入十万条数据 drop procedure if exists insert_emp; CREATE PROCEDURE insert_emp () BEGINDECLAREi INT;SET i 1;WHILE( i < 100000 ) DOINSERT INTO member ( NAME, age, address, …

【LeetCode热题100】打卡第24天:单词搜索

文章目录 单词搜索⛅前言&#x1f512;题目&#x1f511;题解 单词搜索 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数…

使用花生壳进行内网穿透实验SQLServer

使用的是体验版&#xff0c;进行实验足够了 &#xff08;1&#xff09;输入花生壳帐号密码登录花生壳管理平台&#xff0c;在【内网穿透】界面点击添加映射&#xff1b; &#xff08;2&#xff09;接着需要填写映射ERP服务器的相关内容&#xff1a;①应用类型&#xff1a;ERP系…

【论文系列解读】StableDiff总结

1. diffusion (0) 总结 可以参考此处&#xff1a;https://blog.csdn.net/weixin_40920183/article/details/130652651 https://zhuanlan.zhihu.com/p/599887666 总的来说&#xff0c;diffusion就是分为训练和采样两个阶段。 &#xff08;A&#xff09;训练阶段&#xff1a…

spring boot security快速使用示例

创建spring boot项目 生成脚手架 登录 https://start.spring.io/ 快速创建一个spring boot脚手架的demo&#xff1a; 配置依赖 因为本地依赖的原因&#xff0c;所以更换了spring boot版本为&#xff1a;2.6.11 <parent><groupId>org.springframework.boot<…

GC垃圾回收

GC垃圾回收 了解什么是垃圾回收掌握垃圾会回收的常见算法学习串行、并行、并发、G1垃圾收集器学习GC日志的可视化查看 1.什么是垃圾回收&#xff1f; 程序的运行必然需要申请内存资源&#xff0c;无效的对象资源如果不及时处理就会一直占有内存资源&#xff0c;最终将导致内…

设计模式(二十一):行为型之访问者模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

Debian openssh-server 的安装

在之前安装系统的时候有一个安装 SSH 服务的&#xff0c;结果没点上&#xff0c;导致系统完成后&#xff0c;ssh无法连接上啊&#xff0c;于是要安装sshd 服务。使用命令&#xff1a;apt-get install openssh-server 结果就出现问题了&#xff1a; 网上搜索说是要更新源&#x…

004 maven 插件默认的

Maven – Guide to Configuring Plug-inshttps://maven.apache.org/guides/mini/guide-configuring-plugins.html 默认插件 参数 Apache Maven Compiler Plugin – compiler:compilehttps://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#forceJavacCom…

MATLAB读取OpenFOAM的二进制文件

OpenFOAM的文件格式 上面是OpenFOAM二进制文件的格式&#xff0c;我们可以看出&#xff0c;前面21行都是无关的说明文件&#xff0c;22开始时除了一个括号之外&#xff0c;其它的都是数据。 读取数据 读取数据的思路非常简单&#xff0c;忽略不需要的&#xff0c;读取需要的。…

第七十七天学习记录:高等数学:定积分应用(宋浩板书)

定积分是微积分的一种应用&#xff0c;通过定积分可以求出曲线下面的面积、弧长、质心、转动惯量等一系列物理量。以下是定积分的一些常见应用&#xff1a; 曲线下面的面积&#xff1a;定积分可以用于求曲线下面的面积。举个例子&#xff0c;如果想要求函数f(x) x^2在区间[0,1…

VFC芯片结构及其工作原理

&#xff08;二&#xff09; VFC芯片结构及其工作原理 1&#xff0e;VFC芯片 AD654的结构 AD654芯片是一个单片VFC变换芯片&#xff0c;中心频率为250kHZ。它是由阻抗变换器A、压控振荡器和一个驱动输出级回路构成&#xff0c;其内部结构见图1&#xff0d;15&#xff08;a入压…

VFC式数据采集系统

三、VFC式数据采集系统 &#xff08;一&#xff09;VFC型的A&#xff0f;D变换概述 一般来说在 A&#xff0f;D的变换过程中&#xff0c; CPU要使 S&#xff0f;H、 MPX、 A&#xff0f;D三个芯片之间控制协调好&#xff0c;因此接口电路复杂。而且ADC芯片结构较复杂&#xff0…