Skip to content

垃圾回收

说说你对堆区和栈区的理解

  1. 数据结构方面
  • 栈: 用来存储那些占据空间小、大小固定的数据,其遵循先进后出的原则
  • 堆: 用来存储那些占据空间大、大小不固定的数据,比如引用数据类型
  1. 释放回收
  • 栈: 由编辑器控制其存储和释放。
  • 堆: 如果编辑器没有进行主动的回收,那么会交给 GC 进行垃圾回收

垃圾回收时栈和堆的区别

  • 栈没有垃圾回收的问题,直接就是执行到的时候压栈,函数执行上下文执行完成 出站。

  • 堆就有复杂的垃圾回收机制,如引用计数和标记清除

标记清除 :

在一个执行上下文中如果一个对象赋值给一个变量那么就标记这个对象为 '进入环境', 然后在函数执行完成后将其标记成 '离开环境'。在一定的周期里 垃圾收集机制 回收这些标记为 '离开环境的值'

引用计数

就是如果一个对象赋值给一个变量 那么这个对象 +1, 然后什么时候这个变量 赋值其他就 -1。 在一定的周期里 垃圾收集机制 回收这些为 0 的值。但是存在循环引用的问题。

js
var a = {}
var b = {}
a.b = b
b.a = a