webkit底层运行机制
- 在浏览器打开页面,浏览器引擎会渲染相关的代码(包含js代码)
自上而下执行 - 浏览器会提供一个供代码执行的环境,ECStack(Execution Context Stack
执行环境栈) - 最开始执行的是全局代码,形成一个EC(GLOBAL)
全局上下文,在栈内存执行全局代码 - 在全局的执行上下文中有一个VO(GLOBAL)
全局变量对象,存储对于的变量与对应的值
栈内存 stack
特点:先进后出
栈数据赋值:通常可理解为:赋值粘贴,并且拷贝的是副本
作用:
1.供代码自上而下执行
2.存储基本类型值
栈内存释放:
全局栈内存(ECStack 执行环境栈):关闭页面时才会销毁
一般情况下,函数只要执行完,形成的私有栈就会被销毁释放(排除无限递归,死循环情况)
不释放情况:
如果当前上下文中的某些内容(一般也是当前上下文中创建的堆)被上下文以外的变量或者其他事务所占用,那么当前上下文就不能出栈释放
栈内存的形成:
1.全局 打开浏览器形成的全局作用域是栈内存(全局作用域)
2.私有 手动执行函数形成的私有作用域是栈内存(函数作用域)
3.块级 基于ES6的let/const形成的块级作用域是栈内存(块级作用域)
堆内存 heap
特点:指向地址
堆数据赋值:通常可理解为:指针指向地址(栈内存)
作用:存储引用类型值
堆内存释放:如果堆内存用完后,我们想去手动释放它,则取消所有占用:赋值为 null (null 为空对象指针,也就是不指向任何的堆内存)
不释放情况:如果有变量或者其他东西存储了堆内存的地址,则当前堆内存被视为占用,也就不能释放销毁
堆内存的形成:
1.创建函数
2.创建对象

内存释放机制(垃圾回收机制)
1.标记-清除方式(Webkit内核)
所有活动对象做上标记,清除阶段则把没有标记(也就是非活动对象)销毁
2.引用计数方式(Trident内核)
当前内存被其他东西引用了,则给堆计数1(累加计数),取消占用后,则减1,当减到0后,浏览器就可以把他释放
232

被折叠的 条评论
为什么被折叠?



