标记-清除算法
1 效率问题 :在不连续的空间里如果创建大对象会出发多次gc
2 空间问题: gc后的空间排序不连续
GC分为两个阶段,标记和清除。首先标记所有可回收的对象,在标记完成后统一回收所有被标记的对象。同时会产生不连续的内存碎片。碎片过多会导致以后程序运行时需要分配较大对象时,无法找到足够的连续内存,而不得已再次触发GC。
复制算法
- 将内存按容量划分为两块,每次只使用其中一块。当这一块内存用完了,就将存活的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。这样使得每次都是对半个内存区回收,也不用考虑内存碎片问题,简单高效。缺点需要两倍的内存空间。
jvm堆分布 此模式如果只损失新生代1/10的内存 。假如堆内存为10M 则会损失 10/3/10M = 0.3M

- 标记-整理算法
- 分代收集算法
网友评论