1.前端为什么要关注内存
- 任何一个程序的运行都需要分配的内存空间,而任何一个页面, 如果一些不需要的内存没有得到及时的释放,我们称之为内存泄漏,一次内存泄漏可能不会造成大的问题,但是内存泄漏堆积就会造成内存溢出
- 防止页面占用内存过大,引起客户端卡顿,甚至无响应
- Nodejs 使用V8引擎,内存对于后端服务的性能至关重要,因为后端服务的持久性,后端更容易造成内存溢出
2..js数据类型与js内存机制
- 原始数据类型: 字符串(String),数字(Number),布尔(Boolean),空对象(Null), 未定义(Undefined), Symbol
- 引用数据类型: Object
- 内存空间: 栈内存(stack), 堆内存(heap)
- 栈内存: 栈只能从栈顶单向传给栈底,原始数据类型的大小是固定的
- 堆内存:对于数组和对象的大小是不固定的
3.垃圾回收机制
- 找出那些不再接着使用的变量,然后释放其所占用的内存,垃圾回收器会按照固定的时间间隔周期性地执行这一操作
- js使用垃圾回收机制来自动管理内存,垃圾回收是一把双刃剑
优势:可以大幅简化程序的内存管理代码,降低程序员的负担,减少因长时间运转而带来的内存泄漏问题
不足:意味着程序员将无法掌控内存,js没有暴露任何关于内存的api,我们无法强迫其进行垃圾回收更无法干预内存管理
4.V8引擎的内存管理机制
限制内存的原因:
- V8最初为浏览器而设计,不太可能遇到大量内存的使用场景
- 防止因为垃圾回收所导致的线程暂停执行的时间太长