JVM垃圾回收算法
- 标记清除(已废除)
- 标记整理(老年代)
- 标记复制(青年代)
标记清除:用GC Root 标记出仍在使用的对象在下次回收时将未标记的内存进行清除。(具体如下)
1.首先标记出正在使用的对象内存(带线条的意为标记)
2.GC ROOT进行垃圾回收(清理后的内存情况)
总结:由于这种清理的方式过于简单粗暴所有带来的优缺点是很明显的,不需要复杂的逻辑从而效率就是会高,但缺点就是产生的内存碎片过多,导致二次利用时如果再进来的对象内存占用过大就不利于将释放后的内存充分使用。
标记整理:基于标记清除之上,将清除后的结果进行整理,整理将存活的数据向一边靠拢。
1.因为是基于标记清除之上,所以处理的方式是有所改进的,第一步也是先进行标记。
2.将存活下来的内容进行向一侧靠拢。
总结:由此可见这种处理的方法能够大大的解决内存碎片过多的问题,也大大的将清理后的内存充分的利用起来,但缺点也很明显,因为多了整理的过程所以效率太低、工作量稍大,这可能也就是full gc触发会有卡顿的原因吧。
标记复制:将内存区域划,分别两块。
1.将内存区域划分为两块,在第一次清除操作前把存活的数据复制到另一个内存区域中。
2.复制结束后最终释放所有内存。
总结:同样有点也是解决了内存碎片的问题,同时复制的过程还是比较简单的所以效率相比标记整理是要快的,但是同样也有缺点,因为将内存分为两块的原因所以还是比较占用内存的。
以上就是自行整理的关于垃圾回收算法的笔记,当然有些地方可能形容的有误差也是希望多多包容,详情的话可以看看黑马老师专课讲解。