JavaScript中内存管理

490 阅读1分钟

学习内存管理的必要性:

  1. 优化内存锦上添花
  2. node作后台服务,持久化运行对内存的需求变高。

js数据结构和内存

数据结构分为基本类型和引用类型,算上最新的Symbol和Bigint,共八种,除object是引用类型,其余是基本类型。 基本类型是栈内存存储。引用类型是堆内存存储。

js垃圾回收

栈内存系统操作,一般GC都指堆内存的相关操作。js有以下两种方式:

  1. 引用计数 (较旧方案,无法解决循环引用)
  2. 标记清除

V8内存相关

  1. 内存大小限制64位为1.4GB,32位为1.0GB(原因:1.浏览器本身不持久,2.自动GC的性能问题),可通过buffer等c++库实现突破限制。
  2. 垃圾回收采用分代回收机制

内存管理日常优化实践

  1. 全局变量不使用后手动解除引用。
  2. 避免 JavaScript 的“先创建再补充”(ready-fire-aim)式的动态属性赋值,避免delete使用置null。原因都是为了共享隐藏类实现潜在的性能提升。
  3. 避免内存泄漏
    • 闭包
    • 无效DOM引用
    • 事件监听
    • 定时器

参考&&比起本文你更应该阅读:

  1. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

  2. V8垃圾回收?看这篇就够了!

  3. JavaScript高级程序设计(第四版)