💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
--------------------------------------------------------------------------------------------------------------------------- <div id="div7"><h3> <font color=red> js垃圾回收机制的方式 </font> <h3></div> 自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存。 原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存 通常情况下有两种实现方式:**标记清除和引用计数** ==标记清除==: js中最常用的垃圾回收方式就是标记清除。 >当变量进入环境时,例如,在函数中声明一个变量,就将这个变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标记为“离开环境”。 ==引用计数==的含义是跟踪记录每个值被引用的次数。 >当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用次数加1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数减1。当这个值的引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾回收器下次再运行时,它就会释放那些引用次数为0的值所占用的内存。 --------------------------------------------------------------------------------------------------------------------------- <div id="div7"><h3> <font color=red> 内存管理 </font> <h3></div> - Javascript引擎基础GC方案是(simple GC):mark and sweep(标记清除),即: * (1)遍历所有可访问的对象。 * (2)回收已不可访问的对象。 - GC的缺陷 和其他语言一样,javascript的GC策略也无法避免一个问题:GC时,停止响应其他操作,这是为了安全考虑。而Javascript的GC在100ms甚至以上,对一般的应用还好,但对于JS游戏,动画对连贯性要求比较高的应用,就麻烦了。这就是新引擎需要优化的点:避免GC造成的长时间停止响应。 - GC优化策略 * 1)分代回收(Generation GC) 这个和Java回收策略思想是一致的。目的是通过区分“临时”与“持久”对象;多回收“临时对象”区(young generation),少回收“持久对象”区(tenured generation),减少每次需遍历的对象,从而减少每次GC的耗时 * 2)增量GC 这个方案的思想很简单,就是“每次处理一点,下次再处理一点,如此类推” --------------------------------------------------------------------------------------------------------------------------- <div id="div7"><h3> <font color=red> 常见的内存泄漏情况 </font> <h3></div> 全局变量引起的内存泄漏 闭包引起的内存泄露 被遗忘的定时器或回调 dom清空或删除时,事件未清除导致的内存泄漏 反复重写同一个属性会造成内存大量占用(但关闭IE后内存会被释放)