课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
垃圾回收机制是程序员在学习java编程开发需要重点掌握的一个编程技术,而今天我们就通过案例分析来了解一下,java垃圾回收算法都有哪些类型。
1、标记-清除算法
标记清除算法分为标记和清除两个阶段,即先标记出需要回收的对象,标记完成后统一清理对象。它的优点是效率高,缺点是容易产生内存碎片。
标记阶段是以根节点(GCRoots)为起点在引用链上进行扫描,对存活的对象进行标记。清除阶段是扫描整个对象集合,清除集合中未被标记的对象。
2、标记-复制算法
标记复制算法是将内存划分两个空间,在任意的时间点,所有动态分配的对象都只能分配在其中一个空间,这个空间可以被称为活动空间,而另外一个空间则是空闲的。当有效内存空间耗尽时,JVM将暂停程序运行,开启复制算法GC线程。接下来GC线程会将活动区间内的存活对象,全部复制到空闲区间,且严格按照内存地址依次排列,与此同时,GC线程将更新存活对象的内存引用地址指向新的内存地址。
此时,空闲区间已经与活动区间交换,而垃圾对象现在已经全部留在了原来的活动区间,也就是现在的空闲区间。事实上,在活动区间转换为空间区间的同时,垃圾对象已经被一次性全部回收。
3、标记整理算法
标记整理算法与标记清除算法很相似,也是分为两个阶段:标记和整理,。
标记:它的一个阶段与标记/清除算法是一模一样的,均是遍历GCRoots,然后将存活的对象标记。
整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收。
4、分代回收算法
目前大多数JVM垃圾收集器采用的算法都是分代回收算法,其思想是根据对象存活的生命周期将内存划分成三个区域:新生代、老年代和永久代。划分区域可以参考堆的内存结构,新生代和老年代和堆中的划分是一一对应,而永久代在Java8中已经用元空间代替了。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。