简单类型又叫做基本数据类型或者值类型。
复杂类型又叫做引用类型。
·值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型。
string、number、boolean、undefined、null(返回空对象)
如果有个变量,我们以后打算存储为对象,暂时没想好放啥,这时候就给null。
·引用类型:复杂数据类型,在存储时,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。通过new关键字创建的对象(系统对象,自定义对象),如Object、Array、Date等等。
堆栈空间分配区别:
1.栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈;简单数据类型存放到栈里面。
2.堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。复杂数据类型存放到堆里面。
简单数据类型 是存放在栈里面,里面直接开辟一个空间 存放的是值。
复杂数据类型 首先在栈里面存放地址,十六进制表示,然后这个地址就指向堆里面的数据。
垃圾回收机制
JavaScript 中的内存管理是自动执行的,而且是不可见的。
垃圾:
·没有被引用的对象
·几个对象引用形成一个环,互相引用,但无法访问到
垃圾回收机制:不具有可达性的块或值会被清理
“可达性” 值就是那些以某种方式可访问或可用的值,它们被保证存储在内存中。
优化:
- 分代回收——对象分为两组:“新对象”和“旧对象”。许多对象出现,完成它们的工作并迅速结 ,它们很快就会被清理干净。那些活得足够久的对象,会变“老”,并且很少接受检查。
- 增量回收——如果有很多对象,并且我们试图一次遍历并标记整个对象集,那么可能会花费一些时间,并在执行中会有一定的延迟。因此,引擎试图将垃圾回收分解为多个部分。然后,各个部分分别执行。这需要额外的标记来跟踪变化,这样有很多微小的延迟,而不是很大的延迟。
- 空闲时间收集——垃圾回收器只在 CPU 空闲时运行,以减少对执行的可能影响。