JS V8引擎工作原理简介
首选了解JS的内存模型
js执行过程中,主要有三种类型内存空间:代码空间,栈空间,堆空间
- 代码空间:主要存储可执行的代码
- 栈空间:就是调用栈,用来存储执行上下文的。栈空间一般不大,主要存基本类型数据和引用类型的指针。
- 堆空间:引用类型的值存在堆中,通过栈空间的引用地址来访问堆空间的数据。其特点是空间大,存放多,缺点是分配内存和回收内存会占用一定的时间
为什么要分栈堆空间?
所有数据不能都放在栈空间里,因为js引擎需要栈来维护程序执行的上下文的状态,如果所有数据都存在栈空间里,栈空间大,数据量大,会导致寻找上下文慢,上下文切换效率变低,进而影响整个程序的效率。
JS v8引擎的垃圾回收机制简介
垃圾回收策略分为手动回收,自动回收。
手动回收:针对c/c++语言的
自动回收:js,java,python等都是自动回收,原则上不需要手动释放。
JS中常见的垃圾回收方式
- 标记清除
原理:变量进入执行程序环境,则标记为‘进入环境’,变量离开环境则标记为‘离开’,‘离开’标记的就会被回收或被新变量替代。进出过程由当前执行状态的指针ESP指向函数上下文,下移到下一个函数上下文的过程中进行销毁或被替代。
特点:标记清除主要用来