JVM笔记五:垃圾收集器与内存分配策略——垃圾收集算法

文章目录
  1. 1. 标记-清除算法
  2. 2. 复制算法
  3. 3. 标记-整理算法
  4. 4. 分代收集算法

标记-清除算法

最基础的垃圾收集算法。

参考:http://www.jianshu.com/p/b0f5d21fe031

复制算法

半区复制算法的目的也是为了更好的缓解内存碎片问题。

现在的商业虚拟机都是采用这种收集算法来回收新生代,新生代中的对象98%是朝生夕死的,所以并不需要安装1:1的比例划分内存空间,而是将内存分为一块较大的Eden区,和两块较小的Survivor空间。
HotSpot虚拟机默认Eden和Survivor的大小比例是8:1,也就是每次新生代可用内存空间为整个新生代容量的90%,只有10%的内存会被浪费。当Servivor空间不够用时,需要依赖其他内存(这里指老年代)进行分担担保。

复制收集算法在对象存活率较高时就要进行较多的复制操作,效率将会降低。更关键的是,如果不想浪费50%的空间,就需要有额外的空间进行担保,以应对被使用的内存中所有对象100%存活的极端情况,所以在老年代一般不能直接选用这种算法。

标记-整理算法

分代收集算法