JavaScript垃圾回收
1. 常见实现原理
- 标记清理
当变量进入对应上下文中时标记函数变量为存在使用,当变量不在当前上下文时标记当前变量为未使用
function foo() { // 执行进入函数,变量定义赋值 const num = 9 // 标记变量num为使用中 } // 开始执行函数 foo() // 函数执行完成 标记num为未使用 // 由浏览器垃圾回收机制(复杂),不同频率,或者当前浏览器内存使用情况等执行回收,回收标记为未使用的变量num
- 引用计数
根据变量是否存在引用,记录引用次数,引用次数为0,视为垃圾变量
// {name:'test'}引用为1 const a= {name:'test'} // {name:'test'}引用为2 const b = a // {name:'test'}引用为1 b = null // {name:'test'}引用为0 a= bull // 垃圾回收触发 回收 {name:'test'}
存在问题的情况
// {name:'a'} 引用为1 const a = {name:'a'} // {name:'b'} 引用为1 const b = {name:'b'} // {name:'b'} 引用为2 a.child = b // {name:'a'} 引用为2 b.child = a a = null b = null // 引用仍然为2 这两个变量将无法回收
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?