将可用内存容量划分为大小相等的两块,每次使用其中一块(用空间换时间)。当这一块用完之后,就将还存活的对象复制到另一块上面,然后再把自己使用过的内存空间一次处理掉。这样使得每次都是对其中一块进行内存回收,不会产生碎片等情况,只要一动堆顶的指针,按顺序分配内存即可。实现简单、运行高效(回收新生代)。
它的主要缺点:内存缩小为原来的一半。