
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
垃圾回收机制在软件编程开发项目中是使用非常频繁的一个编程技术,下面我们就通过案例分析来了解一下,java垃圾回收机制算法都有哪些类型。
1、标记-清除算法(Mark-Sweep)
什么是标记-清除算法?
分为标记和清除两个阶段。先标记出所有需要回收的对象,在标记完成后统一回收被标记的对象。
有什么缺点?
效率问题:标记和清除过程的效率都不高。
空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致,程序分配较大对象时无法找到足够的连续内存,不得不提前出发另一次垃圾收集动作。
2、复制算法(Copying)-新生代
将可用内存按容量划分为大小相等的两块,每次只使用其中一块。当这一块的内存用完了,就将存活着的对象复制到另一块上面,然后再把已经使用过的内存空间一次清理掉。
优点
复制算法使得每次都是针对其中的一块进行内存回收,内存分配时也不用考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存即可,实现简单,运行高效。
缺点
将内存缩小为原来的一半。在对象存活率较高时,需要执行较多的复制操作,效率会变低。
3、标记-整理算法(Mark-Compact)-老年代
标记过程仍然与“标记-清除”算法一样,但不是直接对可回收对象进行清理,而是让所有存活的对象向一端移动,然后直接清理掉边界以外的内存。
4、分代收集算法
根据对象的存活周期,将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点,采用适当的收集算法。
新生代:每次垃圾收集时会有大批对象死去,只有少量存活,所以选择复制算法,只需要少量存活对象的复制成本就可以完成收集。
老年代:对象存活率高、没有额外空间对它进行分配担保,必须使用“标记-清理”或“标记-整理”算法进行回收。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。