标记清除算法:
先标记,然后再遍历堆对象清除
问题1:什么时候需要启动标记清除
答案1:堆可用内存不足的时候启动
问题2:怎么启动标记清除?以什么方式?
答案2:启动gc线程
问题3:标记的是什么
答案3:是通过可达性分析GC-Root来标记存活的对象(不是死亡对象,因为标记存活对象效率更高),对象头中标记位变成存活标记。
问题4:怎么清除
答案4:先停止整个应用,如果不停则会出现误删除,Stop The World(STW)遍历整个堆对象(耗时长),清除没有标记的对象,并把标记的对象头里的信息变为未标记。
问题5:清除过后的操作
答案5:通知应用线程回复运行
问题6:缺点
答案6:(1)耗时长,
(2)清除过程停止应用线程,
(3)清除后的内存空间不连续,不适合再存放数组(需要连续的内存空间)和大内存对象
因为还放不了大内存对象 就会引发下一次GC