课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
java垃圾回收机制是java程序员需要重点掌握的一个编程知识,而今天我们就一起来了解一下,java垃圾回收算法都有哪些类型。
1.分代收集理论
分代收集(GenerationalCollection),建立在三个假设上:
弱分代假说(WeakGenerationalHypothesis):绝大多数对象都是朝生夕灭的。
强分代假说(StrongGenerationalHypothesis):熬过越多次垃圾收集过程的对象就越难消亡。
跨代引用假说(IntergenerationalReferenceHypothesis):跨代引用相对于同代引用来说仅占极少数。
2.标记-清除算法
标记-清除(Mark-Sweep)算法:标记所有需要回收对象,在标记完成后,统一回收掉所有被标记的对象;或者,标记存活的对象,统一回收所有未被标记的对象。
缺点:
执行效率不稳定,如果Java堆中包含大量对象,而且其中大部分需要被回收,这时必须进行大量标记和清除的动作,导致标记和清除的执行效率随对象数量增长而降低;
内存空间的碎片化问题,标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后程序运行过程中需要分配较大对象时无法找到足够连续的内存而不得不触发另一次垃圾收集动作。
3.标记-复制算法
半区复制(SemispaceCopying)算法:将可用内存按容量划分大小相等的两块,每次只使用其中一块。当一块内存用完了,就将还存活着的对象复制到另外一块上,然后再把已使用过的内存空间一次清理掉。
4.标记-整理算法
标记-整理(Mark-Compact)算法,其中标记过程与“标记-清除”算法一样,整理过程是让所有存储对象都向内存空间的一端移动,然后直接清理掉边界以外的内存。
标记整理算法的弊端是移动存活对象并更新所有引用工作量比较大,而且需要StopTheWorld,会造成延迟。
标记清除算法的弊端是由于空间碎片化,需要复杂的内存分配器和内存访问器,会影响吞吐量。
HotSpot虚拟机里面关注吞吐量的的ParallelScavenge收集器是基于标记-整理算法的,关注延迟的CMS收集器是基于标记-清除算法的。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。