课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了垃圾回收机制的一些基础知识等内容,而本文我们就继续来学习一下,垃圾回收常用算法都有哪些。
复制算法
复制算法(Copying),将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要按顺序分配内存即可。
标记清除算法
标记清除算法(Mark-Sweep),分为标记和清除两个阶段:
先扫描所有对象标记出需要回收的对象。
在标记完成后扫描回收所有被标记的对象。
优点:算法简单、容易实现,且不会移动对象
缺点:回收效率略低,因为需要扫描两遍。如果大部分对象是朝生夕死,那么回收效率降低,因为需要大量标记对象和回收对象,对比复制回收效率要低。主要的问题是标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾回收动作。
标记整理算法
标记整理算法(Mark-Compact),算法分为标记、整理和清除三个阶段:
先标记出所有需要回收的对象。
在标记完成后,后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动。
然后直接清理掉端边界以外的内存。
优点:不会产生内存碎片。
缺点:两遍扫描、指针需要调整,因此效率偏低。
我们知到标记整理与标记清除算法的区别主要在于对象的移动。对象移动不单单会加重系统负担,同时需要全程暂停用户线程才能进行,同时所有引用对象的地方都需要更新(直接指针需要调整)。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。