问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

QuickJS 源码剖析:垃圾回收原理

发布网友 发布时间:2023-01-09 16:27

我来回答

1个回答

热心网友 时间:2023-10-23 23:41

QuickJS 是一个轻量级的 JavaScript 引擎,可以代替 V8 实现 JS 脚本的执行,如果要使用 QuickJS,必须要弄懂其垃圾回收原理,否则容易出现野指针或内存泄漏,从而导致程序崩溃,本文通过源码剖析 QuickJS 的垃圾回收原理。

QuickJS 是使用引用计数法来判断对象是否可以被释放,引用计数法非常简单,通过给对象分配一个计时器来保存该对象被引用的次数,如果该对象被其它对象引用就会加1,如果删除引用就会减1,当引用的计数器为0时,那么就会被回收。

JSRuntime 是 QuickJS 最底层的执行环境,不使用的时需要及时释放。

一个 JSRuntime 可以创建多个 Context,每个 Context 之间是相互隔离的,不使用的时需要及时释放。

如果我们需要自己创建和关联JS对象时,我们需要处理好引用问题,必须通过 c 创建一个JSValue对象,那么我们就需要手动释放它,否则就会导致内存泄漏,同时我们也不能多次释放,这也会导致野指针,从而导致程序崩溃,如果我们只是纯粹运行js脚本就无需我们关心这个问题,引擎已经处理好了。

通过上面示例,我们得知引用计数法是通过JS_DupValue记录引用+1,JS_FreeValue引用减1实现计数,接下来就通过源码分析如何实现。

引用计数器头是一个结构体,目前只有一个int值,用于记录对象的引用次数。

引用计数器+1

JS_FreeValue 处理引用计数器-1,如果引用属于小于0时候就会执行垃圾回收,这里引入引用计数器最大的问题,如果a引用b,b也引用了a,这样的相互应用是不是就会导致a和b都无法回收?

JS_RunGC 函数就是用来解决相互引用问题,会在特定的时机触发。

经过上面两个函数,tmp_obj_list 就只会剩下环形引用的对象,gc_free_cycles() 回收 tmp_obj_list 列表的对象,并且对属性的引用-1。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
强奸罪判多少年可以缓刑吗 20句充满着正能量的最励志的英语名言 如何通过cet-4? 去赤道几内亚,需要带什么行李,生活用品,在那边大概生活一年,什么东西... 去赤道几内亚需要准备什么?主要要预防什么疾病?要准备什么预防药品... 可惜!大部分消费者在交易后会取消亚马逊Prime会员资格 想问下 cpu i7 4900mq. gtx765m显卡. 32G内存 能大部分游戏效果开高么... i7 4800MQ i7 4900MQ 能有多大差别? 外星人14,显卡GTX765M。玩... 三星k2200打印机怎么升级 三星k2200打印机怎么升级br? 三星k2200打印机如何双面打? 东莞注册公司要什么条件 生蛋和糖心蛋六年级日记 负债少女安卓打工点不了 踢球用脚的什么部位踢 求解1602在自己焊的电路中为什么不能显示啊? 梦见别人家的沙发 梦见情人卖自己的沙发 梦到晚霞很美是什么意思呢 股票国泰君安代码是多少?国泰君安的价位是多少?国泰君安股票今日价格是多少钱? 微信会员卡设置 为什么能登得上 QQ就登不上呢 标准组合,准永久组合,基本组合哪个大 小米电脑打不出来g 热狗面包的家常做法是什么 建行刷脸怎么显示408 建行手机银行刷脸认证失败怎么办? 华为手机更新后无法退出微信界面 我用U盘修复工具恢复的文件不知道恢复到个盘里去啦U盘里... 我在5173买的号,买了以后设置身份证、邮箱、密保、QQ令牌、在改密码,他是不是打死都不可能找回? 地平线4和好友一起玩方法是什么? 花梨木和崖柏哪个盘出来好看 winCE下 mfc程序如何给对话框添加背景图片 MFC对话框背景图片问题 梦见自己光着膀子走在路上 做梦梦到自己光着的身子在外面走预示着什么 中年女人梦见自己光着全身,什么意思? 摆摆动的快慢与摆锤的重量和摆幅有关吗? 奔驰所有车型的价格范围 奔驰全车系有哪些?价格是分别是多少 金立w909能用微信吗 吉利帝豪mr7152c06有泊车自动落锁功能吗? 谷歌浏览器怎样打开网页 花呗额度券获得通知什么 粄如何读 中茶五福千两茶是熟茶吗 美国什么保健品值得买 美国保健品什么牌子好 谁有恃宠而骄完整版的? 警务站站长是什么官? 警务站的人是警察吗