垃圾收集的原理
#牛客AI配图神器#
JavaScript 主要采用两种技术进行垃圾收集:**标记-清除(Mark-and-Sweep)**和 引用计数(Reference Counting)。
标记-清除(Mark-and-Sweep):
标记阶段:垃圾收集器首先会遍历根对象(例如全局对象、活动函数的变量、闭包等),并标记所有可达的对象。可达对象是指从根对象能够直接或间接访问到的对象。
清除阶段:在标记阶段结束后,垃圾收集器会遍历所有对象,删除那些没有被标记的对象,回收它们所占用的内存。
引用计数(Reference Counting):
在引用计数的机制中,每个对象都有一个引用计数,表示指向它的引用的数量。当引用计数变为零时,表明该对象不再被使用,垃圾收集器会回收它。
这种方法的缺点是无法处理循环引用。例如,如果对象 A 引用对象 B,而对象 B 也引用了对象 A,则它们的引用计数都不会降到零,从而造成内存泄漏。
垃圾收集的触发
JavaScript 的垃圾收集是自动进行的,通常在以下情况下触发:https://www.nowcoder.com/issue/tutorial?zhuanlanId=j572L2&uuid=54893728e7dc47468b75c702e19b3a62
内存不足:当应用程序试图分配更多内存而系统内存不足时。
定时:引擎可能会周期性地检测和回收未使用的内存。
JavaScript 主要采用两种技术进行垃圾收集:**标记-清除(Mark-and-Sweep)**和 引用计数(Reference Counting)。
标记-清除(Mark-and-Sweep):
标记阶段:垃圾收集器首先会遍历根对象(例如全局对象、活动函数的变量、闭包等),并标记所有可达的对象。可达对象是指从根对象能够直接或间接访问到的对象。
清除阶段:在标记阶段结束后,垃圾收集器会遍历所有对象,删除那些没有被标记的对象,回收它们所占用的内存。
引用计数(Reference Counting):
在引用计数的机制中,每个对象都有一个引用计数,表示指向它的引用的数量。当引用计数变为零时,表明该对象不再被使用,垃圾收集器会回收它。
这种方法的缺点是无法处理循环引用。例如,如果对象 A 引用对象 B,而对象 B 也引用了对象 A,则它们的引用计数都不会降到零,从而造成内存泄漏。
垃圾收集的触发
JavaScript 的垃圾收集是自动进行的,通常在以下情况下触发:https://www.nowcoder.com/issue/tutorial?zhuanlanId=j572L2&uuid=54893728e7dc47468b75c702e19b3a62
内存不足:当应用程序试图分配更多内存而系统内存不足时。
定时:引擎可能会周期性地检测和回收未使用的内存。
全部评论
相关推荐
03-11 18:04
广东技术师范大学 前端工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享