基本数据类型是存储在执行上下文中的,执行上下文在执行时又被压入栈空间中,所以基本数据类型也存储在栈空间中。
引用数据类型是存储在堆空间中的。
调用栈中的数据是如何回收的
v8中有个记录当前执行状态的指针(ESP),指向调用栈中正在执行的函数的上下文。
当一个函数执行结束之后,v8会通过下移ESP来销毁该函数保存在栈中的上下文。
堆中的数据是如何回收的
代际假说:
- 大部分对象在内存在存在时间都很短;
- 不死的对象会活的更久;
新生代区域:生存时间短的对象。(副垃圾回收器)
老生代区域:生存时间久的对象。(主垃圾回收器)
垃圾回收过程
- 标记空间中的活动对象(还在使用的)和非活动对象(可以回收的)。
- 标记完成后,统一清理内存中的非活动对象。
- 内存整理。整理内存中的大量不连续的空间。