js中的垃圾回收

152 阅读1分钟

基本数据类型是存储在执行上下文中的,执行上下文在执行时又被压入栈空间中,所以基本数据类型也存储在栈空间中。

引用数据类型是存储在堆空间中的。

调用栈中的数据是如何回收的

v8中有个记录当前执行状态的指针(ESP),指向调用栈中正在执行的函数的上下文。

当一个函数执行结束之后,v8会通过下移ESP来销毁该函数保存在栈中的上下文。

堆中的数据是如何回收的

代际假说:

  1. 大部分对象在内存在存在时间都很短;
  2. 不死的对象会活的更久;

新生代区域:生存时间短的对象。(副垃圾回收器)

老生代区域:生存时间久的对象。(主垃圾回收器)

垃圾回收过程

  1. 标记空间中的活动对象(还在使用的)和非活动对象(可以回收的)。
  2. 标记完成后,统一清理内存中的非活动对象。
  3. 内存整理。整理内存中的大量不连续的空间。