简述

把存储空间一分为二,然后把数据倒来倒去,标记未被引用的对象,然后清除的方式来进行垃圾回收。
类似于小时候吃方便面吃到最后一点有很多调料,然后倒在手里倒来倒去,把调料倒出来。

过程描述

  • 创建对象的时候会选一个区,from space 或 to space,这里假设是 from space,以后创建对象就都往这里面放。
  • 一直放对象把from space 快放满了放不下了,它只有16M,这时开始整理工作,两个事情
  1. 把没有在引用状态的对象释放
  2. 把在引用状态的对象全都放到to space中去
  • 现在from 是空的,如果有新创建的对象会继续往to space中放,直到to也满了

那么问题来了,就这么来回复制,对象很多,一个from放不下了怎么办呢?
在当前解析引擎中有不同的处理机制,比如可以把这些对象晋升到另一个内存区,用另一种整理频次不高的整理方式去整理。
这种划分两个空间,定期复制整理的垃圾整理算法叫做Scavenge 算法
Scavenging - 图1
image.png

应用

v8js解析引擎用于新生代内存整理的垃圾回收方式