V8垃圾回收机制

131 阅读1分钟

垃圾数据如何产生

window.test=new Object()
window.test.a= new Unit16Array()

//产生垃圾数据

window.test.a=new Object()


image.png

垃圾回收原理

keywords: 清除,整理内存

代际假说:

  1. 大多对象生命周期很短,在内存中存活的时间比较短,比如函数内部声明,块级作用域,当代码或者函数执行结束后,对象也就被销毁。
  2. 不死对象活的更久。一些特定对象长久的在内存中存活,比如window对象,DOM对象,webAPI等

两块区域:young space 和 old space

image.png

young space

存放临时的,小对象,对应代际假说第一条

  • 副垃圾回收器算法:

分两块区域:对象区,空闲区,对象区存放变量,当对象区满了之后,触发垃圾回收算法,标记对象区垃圾并清除,将依然存活的复制到空闲区(此时也顺道完成了内存整理),清除对象区,交换对象区和空闲区,两次未被清除的,升级到old space

old space

  • 主垃圾回收器算法:

标记-清除

标记:从根节点开始,不能遍历到的标记 清除:清除非活动对象

image.png

此时容易产生内存碎片,how?

标记-整理

让所有活动对象向一端移动,然后清除剩余空间

image.png