1 内存管理的使用
//申请 let obj=() //使用 obj.name //三 释放 obj =null // 由于javascript中没有可以操作的api 这里简单模拟
2 JavaScript中垃圾回收机制
2.1什么是javascript中的垃圾
-
·JavaScript中内存管理是自动的
-
·对象不再被引用时是垃圾
-
·对象不能从根上访问到时是垃圾
2.2什么是JavaScript中的可达对象
- ·可以访问到的对象就是可达对象(引用、作用域链)
- ·可达的标准就是从根出发是否能够被找到
- ·JavaScript中的根就可以理解为是全局变量对象
3GC算法是什么
-
GC是一种机制,垃圾回收器完成具体的工作
-
工作的内容就是查找垃圾释放空间、回收回收空间
- 算法就是工作时查找和回收所遵循的规则
3.1引用计数算法
简单的理解就是用到了就加一 发现不用了就减一 ,当计数为零的时候 这个内容将被当做垃圾清除
优点 :
·发现垃圾时立即回收
·最大限度减少程序暂停
缺点 :
·无法回收循环引用的对象
·时间开销大
3.2 标记清除算法
标记清除算法原理
·核心思想:分标记和清除二个阶段完成
·遍历所有对象找标记活动对象
·遍历所有对象清除没有标记对象
·回收相应的空间
优点:
解决计数循环引用无法删除
缺点:
空间的碎片化
3.3标记整理算法
标记整理算法实现原理
·标记整理可以看做是标记清除的增强
·标记阶段的操作和标记清除一致
·清除阶段会先执行整理,移动对象位置
优点 :
内存地址更集中
GC算法的总结:
- 引用计数 优点 及时回收垃圾 减小程序的卡顿 缺点 无法回收循环引用的对象 资源消耗大
- 标记清除 优点 可以回收循环引用对象 缺点 空间碎片化 浪费空间 不会立即清除
- 标记整理 优点 减少碎片化空间 缺点 不会立即清除
4v8 引擎
4.1 什么是v8
- V8是一款主流的JavaScript执行引擎
- V8采用即时编译
- V8内存设限
4.2 v8的垃圾回收策略
由于v8是有内存限制的所以就要采用分代回收,同时为了提高效率又采用了很多GC的算法 还有新增的·分代回收·空间复制·标记清除·标记整理·标记增量
4.3新生代对象回收实现
- ·回收过程采用复制算法+标记整理
- ·新生代内存区分为二个等大小空间
- ·使用空间为From,空闲空间为To
- ·活动对象存储于From空间
- ·标记整理后将活动对象拷贝至To
- ·From与To交换空间完成释放
- 回收细节说明
·拷贝过程中可能出现晋升
·晋升就是将新生代对象移动至老生代
·一轮GC还存活的新生代需要晋升
·To空间的使用率超过25%
4.4 回收老生代对象回收
·主要采用标记清除、标记整理、增量标记算法
·首先使用标记清除完成垃圾空间的回收
·采用标记整理进行空间优化
·采用增量标记进行效率优化
5Performance 使用步骤
- ·打开浏览器输入目标网址
- ·进入开发人员工具面板,选择性能
- ·开启录制功能,访问具体界面
- ·执行用户行为,一段时间后停止录制
- ·分析界面中记录的内存信息
6内存问题的外在表现
-
·页面出现延迟加载或经常性暂停
-
·页面持续性出现糟糕的性能
-
·页面的性能随时间延长越来越差
7 界定内存问题的标准
- ·内存泄露:内存使用持续升高
- ·内存膨胀:在多数设备上都存在性能问题
- ·频繁垃圾回收:
- :通过内存变化图进行分析
8 监控内存的几种方式
- ·浏览器任务管理器
- ·Timeline时序图记录
- ·堆快照查找分离DOM
- ·判断是否存在频繁的垃圾回收
9V8引擎工作流程
10 什么是闭包?
- 闭包是一种机制,通过私有上下文来保护当中变量机制。
- 我们也可以认为当我们创建的某一个执行上下文不被释放的时候就形成了闭包
- 保护、保存数据