Skip to content

JS中的内存占用

前言

思考下面的 r1r2 谁占用的内存更多?

ts
const o = {id: 1}

const r1 = [o]
const r2 = [o.id]

很明显,r1 的写法更加占用内存。

但如果现在 o 被其它地方引用而导致它会一直存储于内存中呢?这种情况下是 r1 还是 r2

JS不同类型的内存占用

在 JavaScript 中,不同数据类型所占用的字节数是不同的,具体如下:

  1. 基本类型数据:
  • UndefinedNull 类型分别占用 4 个字节的内存空间。
  • Boolean 类型占用 4 个字节的内存空间。
  • Number 类型占用 8 个字节的内存空间,即 64 位。
  • String 类型占用的内存空间是可变的,它取决于字符串的长度和字符编码方式,例如 UTF-8UTF-16UTF-8 编码的字符串通常占用 14 个字节,UTF-16 编码的字符串通常占用 2 个字节。
  1. 复合数据类型:
  • Object 类型是复合类型数据,它占用的内存空间大小是不固定的,它包含了一组属性和方法,每个属性和方法的大小也是不固定的。
  • Array 类型是 Object 的一种特殊形式,它占用的内存空间大小也是不固定的,它包含了一组元素,每个元素的大小也是不固定的。
  • 对象的引用 通常是一个指向该对象存储位置的指针或地址,这个 指针 或地址的大小是固定的,通常是 48 个字节,与该对象的大小无关。

需要注意的是,基本类型的数据都是固定的,它们占用的内存空间也是固定的,而不受具体值的大小或范围的影响。例如,一个数值类型的变量无论存储的值是 1 还是 1000000,它都会占用同样的内存空间,即 8 个字节。

JavaScript 中的内存管理是由垃圾回收器自动管理的,它会自动回收不再使用的内存空间。因此,在编写 JavaScript 程序时,我们通常不需要过分关注内存占用问题,而应该更加关注代码的可读性、可维护性和性能等方面的问题。

结论

知道了不同类型的内存占用就很容易得出结论了:

  • o 始终存在于内存中时:指针: 8字节 = Number: 8字节,因此它们占用相同的内存空间。