快速理解 JavaScript 的垃圾回收
前言
JS具有自动垃圾回收机制,换句话说,执行环境会管理代码执行过程中使用的内存。
JS垃圾回收的原理
执行环境会找出那些不再继续使用的变量,然后释放其占用的内存。
JS垃圾回收的策略
标记清除
当变量进入环境时,就将这个变量标记为“进入环境”,而当变量离开环境时,则将其标记为“离开环境”。
标记变量方式看具体的实现,比如可以使用一个“进入环境”的变量列表和一个“离开环境”的变量列表来跟踪哪个变量发生了变化。
使用过标记清除的浏览器有IE,Firefox,chrome。
引用计数
这是一种不太常见的垃圾回收的策略,它就是跟踪每一个值被引用的次数。
当声明了一个变量a并将一个引用类型值({name:'cc'})赋给该变量时,则这个值的引用次数就是1,如果a({name:'cc'})又赋给另一个变量b,则该值的引用次数加1。反之,如果a赋值{name:'xx'},则{name:'cc'}这个值的引用次数减1。当{name:'cc'}这个值的引用的次数变为0时,则说明没有办法再访问{name:'cc'}这个值了,因而可以将其占用的内存空间回收。这样,当垃圾回收器工作的时候,{name:'cc'}这个值占用的内存空间就会被回收。
这种方式曾今被Netscape Navigator 3.0使用过,但是有一个严重问题:循环引用。
functioncircleReferenceProbem(){letobjectA=newObject()letobjectB=newObject()objectA.someOtherObject=objectBobjectB.anotherObject=objectA}
执行这个函数后,因为这两个引用值的引用次数永远不会为0,垃圾回收器永远不会回收它们占用的内存空间。
JS垃圾回收器的性能
因为JS垃圾回收器是每隔一个周期就执行一次垃圾回收。
如果为变量分配的内存数量不大的话,那么垃圾回收器的回收工作量就不大。但是,当垃圾回收器的工作量过大的时候,就很可能会出现卡顿的情况。
JS中管理内存的建议
1、尽量少用全局变量
2、尽可能手动清除变量的引用
产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;
日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉;
本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;
部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入;
如若转载,请注明出处:https://www.chanpinyuan.cn/38479.html;