当前位置: 首页 > Web前端 > HTML

Web前端实训javaScript内存管理机制分享

时间:2023-03-28 18:55:53 HTML

以下文章转载自优派云js内存管理与js垃圾关于JavaScript内存管理机制相信大家都懂的。下面简单介绍一下js内存管理和js垃圾。JavaScript内存管理由JS自动操作,不需要人为参与。这些内存管理包括以下三项:申请内存空间,使用内容空间释放内容空间,而js垃圾是指当对象不再被引用,无法从根访问对象时,可以称为js垃圾.其他部分包括引用和可达对象,想必大家都很熟悉,就不多说了。下面说说GC算法。GC算法GC算法其实就是寻找内存中的垃圾,并释放和回收空间。这里所说的垃圾是指算法中程序中不再需要的对象,程序中不能访问的对象。说到GC算法,这是一个比较概念化的内容,所以简单总结一下。GC是一种垃圾收集器机制,它找到垃圾释放空间并从内存中回收空间。算法是查找和集合在工作时遵循的规则。常见的GC算法包括引用计数、标记清除、标记整理、分代回收_前端训练。引用计数引用计数曾经主要用在IE8以下的浏览器中,现在浏览器中已经不用了,所以只简单介绍一下。引用计数的基本原理是记录和跟踪每个值被引用的次数。引用时计数加一,释放时计数减一。当该值为零时,表示该值所在的内存不再使用,因此占用的空间被释放。引用计数的好处是实时监控引用的数量,因此可以及时收集垃圾,从而最大限度地减少程序停顿时间。但也正是因为一直在运行,所以资源消耗和时间开销都比较高,循环引用的对象无法回收。MarkclearingMarkclearing分为标记和清除两个阶段。核心思想是遍历所有对象,找到有标记的活动对象,即前面提到的可达对象,清除未标记对象,回收未标记对象的空间。.上图是全局搜索的简单流程图。其中左边的A、B、C、D、E代表可以找到的对象,右边的a1、b1代表循环引用对象。其中a1为引用计数,由于引用计数一直在运行,所以循环引用对象的劣势无法挽回,反向查找循环引用对象即可。这也是标记清除的好处,可以解决对象循环的引用回收问题。但是标记清除的缺点是空间碎片化,不能及时回收垃圾对象。因为需要先标记再清除,不能像引用计数那样实时监控值,所以不能最大限度地利用空间。从下图可以简单看一下标记去除的空间碎片化特征。上面提到markcollat??ion,markclearing有空间碎片化的缺点,markcollat??ion优化了这个缺点。顾名思义,markup是对标记去除的增强。标记阶段标记和清洗的操作与标记和清除相同,但在清除阶段,会先进行清洗,再进行清除。这种方法可以有效减少碎片空间。和marksweeping一样,marksweeping不能实时回收垃圾对象。通过下面三张图,我们对标注有了一个简单直观的认识。可以看出,在垃圾回收之前,活动空间和非活动空间是混合的。回收确认后,标记和整理会对空间进行分类整理,将活动空间和非活动空间组织在一起,形成下图的结果:大量的碎片化空间,让空间最大化应用。看完了GC算法,下面我们以V8引擎为例,看看GC算法在JS垃圾回收中是如何使用的。V8引擎的垃圾回收V8是目前比较主流的JavaScript执行引擎。它采用实时编译,处理速度快。V8的内存是有限的。比如64位操作系统的上限是1.4T,下限是700M。32位操作系统的上限和下限分别为64M和32M。V8采用分代收集的垃圾收集策略,将内存分为新生代和老年代,针对不同的对象采用不同的对应算法。△V8的垃圾回收策略上图是V8的内存分配示意图。可以清楚的看出V8的内存空间分为两部分。左边的from和to是新生代,占用空间比较小(32M|16M)。这里的新生代指的是生存时间较短的存储区。右边红色部分为老年代存储区_生存时间较长的web前端训练。V8中常用的GC算法有五种:分代回收、空间复制、标记清除、标记清除、标记递增。其中,新生代采用复制算法和标记清除进行垃圾回收,老年代采用标记清除、标记清除、增量标记进行垃圾回收。回收。V8新生代对象回收实现上图是V8新生代对象回收的实现图。垃圾收集是通过结合复制算法和标记排序来进行的。新生代内存区中两个大小相等的空间,From代表存放活动对象的已用空间,To代表空闲空间。V8的新生代对象回收是通过标记排序,将排序后的对象复制到To,然后交换To和From之间的空间,释放排序后的无用对象占用的空间。请注意,将排序规则对象复制到To时可能会有提升。提升是指将年轻代对象移动到老年代存储区。晋升通常有两个条件。一是一轮GC后还活着的新生代对象可以被提升,二是To空间使用率超过25%。V8老年代对象回收的实现V8老年代回收过程采用标记清除、标记排序和标记递增相结合的方式。一般在垃圾回收时,会通过标记和清除的方式回收垃圾空间。但是当新生代移动到老年代,老年代内存不足时,会通过标记进行空间优化,使用增量标记来优化效率。△增量打标示意图打标增量实际上是一种打标打标操作,使时序合理。这句话可能有点令人费解。简单的说,在垃圾回收的时候,让标记系统在标记的时候划分不同的时间段,分别标记和执行,让两者的操作分开,从而优化时间安排。这样会让页面感觉更流畅。