一、标记-清除算法 Mark-Sweep
这是一个非常基本的GC算法,它是现代GC算法的思想基础,分为标记和清除两个阶段:先把所有活动的对象标记出来,然后把没有被标记的对象统一清除掉。但是它有两个问题,一是效率问题,两个过程的效率都不高。二是空间问题,清除之后会产生大量不连续的内存。
二、复制算法 Copying (新生代)
复制算法是将原有的内存空间分成两块,每次只使用其中的一块。在GC时,将正在使用的内存块中的存活对象复制到未使用的那一块中,然后清除正在使用的内存块中的所有对象,并交换两块内存的角色,完成一次垃圾回收。它比标记-清除算法要高效,但不适用于存活对象较多的内存,因为复制的时候会有较多的时间消耗。它的致命缺点是会有一半的内存浪费。
2.1 HotSpot 虚拟机的改良算法
- 弱代理论
分代垃圾收集基于弱代理论。具体描述如下:
- 大多数分配了内存的对象并不会存活太长时间,在处于年轻时代就会死掉。
- 很少有对象会从老年代变成年轻代。
- Hotspot 虚拟机新生代内存布局及算法
-
新生代内