Lua和JS的垃圾回收机制

news2025/6/7 11:18:36

Lua 和 JavaScript 都采用了 自动垃圾回收机制(GC) 来管理内存,开发者无需手动释放内存,但它们的 实现机制和行为策略不同。下面我们从原理、策略、优缺点等方面来详细对比:


🔶 1. 基本原理对比

特性LuaJavaScript
垃圾回收类型增量式垃圾回收(Incremental GC)标记-清除、标记-压缩、分代回收等多策略
算法核心增量式标记-清除分代式标记-清除(V8 引擎)
回收触发机制基于内存分配/步进基于分配触发、空闲时间回收(V8: idle GC)
回收对象无用的 table/closure/userdata 等所有不可达的对象(闭包、数组、对象等)

🔷 2. Lua 的垃圾回收机制

Lua(默认使用的是 增量式 GC,Lua 5.1 开始引入)

✅ 工作原理

  1. 标记阶段:标记所有可达对象(从根开始遍历)

  2. 清除阶段:回收所有未被标记的对象

✅ 特点

  • 增量式(逐步执行,避免卡顿)

  • 手动控制收集(collectgarbage 函数)

  • 无分代回收(即老对象和新对象一样处理)

✅ 示例

-- 手动触发 GC
collectgarbage("collect")         -- 执行一次完整GC
collectgarbage("count")           -- 查看当前内存使用(KB)
collectgarbage("step", 100)       -- 执行一步GC

🔷 3. JavaScript 的垃圾回收机制(以 V8 引擎为例)

V8(Chrome、Node.js 使用)采用的是 分代垃圾回收 + 多策略优化

✅ 工作原理(简化版)

  1. 新生代(Young Generation)

    • 存放生命周期短的对象

    • 采用 Scavenge 算法(复制 + 清除)

  2. 老生代(Old Generation)

    • 存放生命周期长或经常访问的对象

    • 采用 标记-清除标记-压缩 算法

  3. 增量与并发优化

    • 支持 增量 GC(Incremental GC)

    • 支持 并发 GC(Concurrent GC)

    • 支持空闲时间回收(Idle GC)

✅ 优点

  • 高效,适用于复杂的大型前端/Node.js 应用

  • 分代机制减少频繁回收老对象

  • 自动触发,基本无感知


📌 4. 对比总结

对比项LuaJavaScript(V8)
类型增量式标记清除分代式 + 增量 + 并发 + 空闲优化
可配置性高(可手动调控)低(主要由引擎内部控制)
分代支持❌ 不支持✅ 支持(年轻代/老年代)
调用控制collectgarbage() 等函数手动调用无公开 API,完全自动
性能表现简洁但在大型项目中可能频繁 GC 卡顿高效,适用于大规模 JS 应用

✅ 最后总结一句话:

  • Lua 的 GC 更轻量、可控性强、适合嵌入式和脚本环境

  • JavaScript 的 GC 更复杂、高效,适合大规模 Web 应用和复杂对象图

lua垃圾回收文章:Lua内存管理与垃圾收集机制详解-CSDN博客,lua垃圾回收机制-CSDN博客

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

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

相关文章

实践指南:从零开始搭建RAG驱动的智能问答系统

LLM 赋能的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些是可以回答关于特定来源信息问题的应用程序。这些应用程序使用一种称为检索增强生成的技术,或 RAG。本文将展示如何基于 LangChain 构建一个简单的基于非结构化数据文本数据源的问答应用程序。 温…

边缘计算服务器

边缘计算服务器的核心要点解析,综合技术架构、应用场景与部署方案: 一、核心定义与技术特性‌ 本质定位‌ 部署在网络边缘侧的专用计算设备(如工厂车间、智慧路灯等),直接处理终端设备(传感器、摄像头等…

第R9周:阿尔茨海默病诊断(优化特征选择版)

文章目录 1. 导入数据2. 数据处理2.1 患病占比2.2 相关性分析2.3 年龄与患病探究 3. 特征选择4. 构建数据集4.1 数据集划分与标准化4.2 构建加载 5. 构建模型6. 模型训练6.1 构建训练函数6.2 构建测试函数6.3 设置超参数 7. 模型训练8. 模型评估8.1 结果图 8.2 混淆矩阵9. 总结…

电动螺丝刀-多实体拆图建模案例

多实体建模要注意下面两点: 多实体建模的合并结果一定要谨慎在实际工作中多实体建模是一个非常好的思路,先做产品的整体设计,再将个体零件导出去做局部细节设计 电动螺丝刀模型动图展示 爆炸视图动图展示 案例素材点击此处获取 建模步骤 1. …

当丰收季遇上超导磁测量:粮食产业的科技新征程

麦浪藏光阴,心田种丰年!又到了一年中最令人心潮澎湃的粮食丰收季。金色的麦浪随风翻滚,沉甸甸的稻穗谦逊地低垂着,处处洋溢着丰收的喜悦。粮食产业,无疑是国家发展的根基与命脉,是民生稳定的压舱石。在现代…

电子电气架构 --- 什么是功能架构?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

AudioRelay 0.27.5 手机充当电脑音响

—————【下 载 地 址】——————— 【​本章下载一】:https://pan.xunlei.com/s/VOS4MvfPxrnfS2Zu_YS4egykA1?pwdi2we# 【​本章下载二】:https://pan.xunlei.com/s/VOS4MvfPxrnfS2Zu_YS4egykA1?pwdi2we# 【百款黑科技】:https://uc…

NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析

NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析 摘要 NVIDIA Dynamo是一个革命性的高吞吐量、低延迟推理框架,专为在多节点分布式环境中服务生成式AI和推理模型而设计。本文将深入分析Dynamo的架构设计、核心特性、代码实现以及实际应用示例&…

第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap

Map集合体系 HashMap集合的底层原理 HashMap集合底层是基于哈希表实现的 LinkedHashMap集合的底层原理 TreeMap集合的底层原理 代码&#xff1a; Student类 package com.itheima.day26_Map_impl;import java.util.Objects;public class Student implements Comparable<Stu…

Spring AI之RAG入门

目录 1. 什么是RAG 2. RAG典型应用场景 3. RAG核心流程 3.1. 检索阶段 3.2. 生成阶段 4. 使用Spring AI实现RAG 4.1. 创建项目 4.2. 配置application.yml 4.3. 安装ElasticSearch和Kibana 4.3.1. 安装并启动ElasticSearch 4.3.2. 验证ElasticSearch是否启动成功 …

应用案例 | 设备分布广, 现场维护难? 宏集Cogent DataHub助力分布式锅炉远程运维, 让现场变“透明”

在日本&#xff0c;能源利用与环保问题再次成为社会关注的焦点。越来越多的工业用户开始寻求更高效、可持续的方式来运营设备、管理能源。而作为一家专注于节能与自动化系统集成的企业&#xff0c;日本大阪的TESS工程公司给出了一个值得借鉴的答案。 01 锅炉远程监控难题如何破…

LINUX 66 FTP 2 ;FTP被动模式;FTP客户服务系统

19&#xff0e; 在vim中将所有 abc 替换为 def&#xff0c;在底行模式下执行©&#xff1f;D A、s/abc/def B、s/abc/def/g C、%s/abc/def D、%s/abc/def/g FTP连接 用户名应该填什么 [rootcode ~]# grep -v ^# /etc/vsftpd/vsftpd.conf anonymous_enableNO local_enab…

网心云 OEC/OECT 笔记(2) 运行RKNN程序

目录 网心云 OEC/OECT 笔记(1) 拆机刷入Armbian固件网心云 OEC/OECT 笔记(2) 运行RKNN程序 RKNN OEC/OEC-Turbo 使用的芯片是 RK3566/RK3568, 这个系列是内建神经网络处理器 NPU 的, 利用 RKNN 可以部署运行 AI 模型利用 NPU 硬件加速模型推理. 要使用 NPU, 首先需要在电脑使…

灵活控制,modbus tcp转ethernetip的 多功能水处理方案

油田自动化和先进的油气行业软件为油气公司带来了诸多益处。其中包括&#xff1a; 1.自动化可以消除多余的步骤、减少人为错误并降低运行设备所需的能量&#xff0c;从而降低成本。 2.油天然气行业不断追求高水平生产。自动化可以更轻松地减少计划外停机时间&#xff0c;从而…

深入了解linux系统—— 进程池

前言&#xff1a; 本篇博客所涉及到的代码以同步到本人gitee&#xff1a;进程池 迟来的grown/linux - 码云 - 开源中国 一、池化技术 在之前的学习中&#xff0c;多多少少都听说过池&#xff0c;例如内存池&#xff0c;线程池等等。 那这些池到底是干什么的呢&#xff1f;池…

光电耦合器:数字时代的隐形守护者

在数字化、自动化高速发展的今天&#xff0c;光电耦合器正以一种低调却不可或缺的方式&#xff0c;悄然改变着我们的生活。它不仅是电子电路中的“安全卫士”&#xff0c;更是连接信号世界的“桥梁”&#xff0c;凭借出色的电气隔离能力&#xff0c;为各类设备提供稳定可靠的信…

手机如何防止ip关联?3种低成本方案

在当今数字化时代&#xff0c;手机已成为人们日常生活中不可或缺的工具&#xff0c;无论是社交、购物、支付还是工作&#xff0c;都离不开手机。然而&#xff0c;随着网络技术的不断发展&#xff0c;网络安全问题也日益突出&#xff0c;其中IP关联问题尤为常见。那么&#xff0…

Pandas和Django的示例Demo

以下是一个结合Pandas和Django的示例Demo&#xff0c;展示如何在Django项目中读取、处理和展示Pandas数据。 Pandas和Django的示例Demo 前置条件&#xff1a; 安装python 基础设置 确保已安装Django和Pandas&#xff1a; pip install django pandasInstalling collected p…

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE

目录 1. BR/EDR&#xff08;经典蓝牙&#xff09;网络结构微微网&#xff08;Piconet&#xff09;散射网&#xff08;Scatternet&#xff09;蓝牙 BR/EDR 拓扑结构示意图 2. BLE&#xff08;低功耗蓝牙&#xff09;网络结构广播器与观察者&#xff08;Broadcaster and Observer…

航道无人机巡检系统

随着长江干线、京杭运河等航道智慧化升级提速&#xff0c;传统人工巡检模式已难以满足高频次、大范围、高精度的航道管理需求。无人机凭借其灵活机动、多源感知、高效覆盖等优势&#xff0c;正成为航道巡检的“空中卫士”。本文将结合多地成功案例&#xff0c;从选型标准、技术…