JS中的内存占用
前言
思考下面的 r1
和 r2
谁占用的内存更多?
ts
const o = {id: 1}
const r1 = [o]
const r2 = [o.id]
很明显,r1
的写法更加占用内存。
但如果现在 o
被其它地方引用而导致它会一直存储于内存中呢?这种情况下是 r1
还是 r2
?
JS不同类型的内存占用
在 JavaScript 中,不同数据类型所占用的字节数是不同的,具体如下:
- 基本类型数据:
Undefined
和Null
类型分别占用4
个字节的内存空间。Boolean
类型占用4
个字节的内存空间。Number
类型占用8
个字节的内存空间,即 64 位。String
类型占用的内存空间是可变的,它取决于字符串的长度和字符编码方式,例如UTF-8
或UTF-16
。UTF-8
编码的字符串通常占用1
到4
个字节,UTF-16
编码的字符串通常占用2
个字节。
- 复合数据类型:
Object
类型是复合类型数据,它占用的内存空间大小是不固定的,它包含了一组属性和方法,每个属性和方法的大小也是不固定的。Array
类型是 Object 的一种特殊形式,它占用的内存空间大小也是不固定的,它包含了一组元素,每个元素的大小也是不固定的。对象的引用
通常是一个指向该对象存储位置的指针或地址,这个指针
或地址的大小是固定的,通常是4
或8
个字节,与该对象的大小无关。
需要注意的是,基本类型的数据都是固定的,它们占用的内存空间也是固定的,而不受具体值的大小或范围的影响。例如,一个数值类型的变量无论存储的值是 1 还是 1000000,它都会占用同样的内存空间,即 8 个字节。
JavaScript 中的内存管理是由垃圾回收器自动管理的,它会自动回收不再使用的内存空间。因此,在编写 JavaScript 程序时,我们通常不需要过分关注内存占用问题,而应该更加关注代码的可读性、可维护性和性能等方面的问题。
结论
知道了不同类型的内存占用就很容易得出结论了:
- 当
o
始终存在于内存中时:指针: 8字节
=Number: 8字节
,因此它们占用相同的内存空间。