学习内存管理的必要性:
- 优化内存锦上添花
- node作后台服务,持久化运行对内存的需求变高。
js数据结构和内存
数据结构分为基本类型和引用类型,算上最新的Symbol和Bigint,共八种,除object是引用类型,其余是基本类型。 基本类型是栈内存存储。引用类型是堆内存存储。
js垃圾回收
栈内存系统操作,一般GC都指堆内存的相关操作。js有以下两种方式:
- 引用计数 (较旧方案,无法解决循环引用)
- 标记清除
V8内存相关
- 内存大小限制64位为1.4GB,32位为1.0GB(原因:1.浏览器本身不持久,2.自动GC的性能问题),可通过buffer等c++库实现突破限制。
- 垃圾回收采用分代回收机制
内存管理日常优化实践
- 全局变量不使用后手动解除引用。
- 避免 JavaScript 的“先创建再补充”(ready-fire-aim)式的动态属性赋值,避免delete使用置null。原因都是为了共享隐藏类实现潜在的性能提升。
- 避免内存泄漏
- 闭包
- 无效DOM引用
- 事件监听
- 定时器
参考&&比起本文你更应该阅读:
-
JavaScript高级程序设计(第四版)