zoukankan      html  css  js  c++  java
  • java虚拟机学习总结之GC回收算法与GC收集器

    GC回收算法

    1.标记清除算法
    分为标记阶段和清除阶段
    标记阶段:通过特定的判断方式找出无用的对象实例并将其标记
    清除阶段:将已标记的对象所占用的内存回收
    缺点:运行多次以后容易产生空间碎片,当需要一整段连续内存时虽然空间足够但是无法分配,会多次触发GC操作。

    2.复制算法
    为了提高标记清除算法的效率,减少内存碎片的产生而出现的,该算法将内存空间分为两个完全相同的两部分,每次只使用其中的一部分。
    分为标记阶段、复制阶段和清除阶段
    标记阶段:同标记清除算法的标记阶段一致
    复制阶段:将为标记的对象全部复制到另一块未使用的空间中
    清除阶段:将已标记对象所在空间全部清除
    缺点:虽然解决了空间碎片的问题, 但是内存使用量变为了当前内存的一半

    3.标记整理算法
    为了解决复制算法只能使用一半内存的情况
    分为标记阶段、整理阶段、清除阶段
    标记阶段:同标记清除算法的标记阶段一致
    整理阶段:将未被标记的对象全部移动到固定的一端,将所有存活的对象整齐的排列在内存的一端
    清除阶段:将未被标记的对象的另一块区域清空

    4.分代收集算法
    根据对象存活周期的不同将内存划分为新生代区域和老年代区域,在新生代中的对象生存时间短,通常为朝生夕死类型,老年代中的对象通常存活的时间都很长。
    根据新生代中对象的类型采用改进的复制算法进行垃圾收集,将新生代分为Eden区和两个大小相等的Servior区,它们的比例默认为8:1,每次只使用Eden区和其中一个Servior区,垃圾收集时将未标记的对象移入到另一个Servior区。
    根据老年代对象的类型采用标记整理算法。
    此算法是目前HotSpot虚拟机中默认使用的算法。

    GC收集器

    新生代

    1.Serial收集器
    是一个单线程收集器,会出现Stop The World,即该收集器运行时会暂停其他所有线程。
    适用于客户端模式下的虚拟机

    2.ParNew收集器
    是Serial收集器的多线程版本
    适用于Server模式下的虚拟机
    默认开启的收集线程数和CPU核数相同

    3.Parallel Scavenge收集器
    类似于ParNew收集器,其更关注于吞吐量
    是通过调小新生代空间来实现控制吞吐量的操作
    默认提供自适应的调节策略

    老年代

    1.Serial Old收集器
    特性同Serial收集器相同
    因为是在老年代,使用的收集算法为标记整理算法

    2.Parallel Old收集器
    特性同Parallel Scavenge收集器相同,是Parallel Scavenge收集器的老年代版本
    使用标记整理算法

    3.CMS收集器
    分为初始标记、并发标记、重新标记和并发清除阶段
    初始标记阶段:此阶段标记GCRoots直接关联的对象,需要停止所有线程
    并发标记阶段:同用户线程一起工作,更正标记的对象
    重新标记阶段:修正并发标记阶段因用户操作导致的变化
    并发清除阶段:同用户线程一起工作,清除垃圾
    缺点:对资源敏感,无法处理浮动垃圾
    默认开启的线程数为(CPU数量+3)/4

    4.G1收集器(新生代和老年代通用)
    分为初始标记、并发标记、最终标记和筛选回收阶段
    初始标记阶段:此阶段标记GCRoots直接关联的对象,需要停止所有线程
    并发标记阶段:从GC Roots开始进行可达性分析,与用户线程一起工作
    最终标记阶段:修正在并发标记阶段用户操作导致的变化
    筛选回收阶段:使用多线程的方式清除垃圾
    特点:G1收集器将内存分为了多个大小相同的Region,虽然还存在分区的概念,但是已经不是物理上隔离了,它们都是一部分Region的集合
    名字的由来:优先回收价值最大的Region

    各个收集器的搭配情况

     注:Hot Spot 虚拟机用的就是 分代收集算法,在新生代中用的是改进的复制算法,主要涉及的收集器(Serial收集器、ParNew收集器、Parallel Scavenge收集器以及G1收集器),在老年代中用的是标记整理算法,主要涉及的收集器(Serial Old收集器、Parallel Old收集器、CMS收集器、G1收集器)。

    原文地址:https://blog.csdn.net/luffysk/article/details/82730058

  • 相关阅读:
    dedecms5.7百度主动推送(实时) 开发
    胆囊结石食物选择
    读《遥远的救世主》与观看电视剧天道
    cnn健康增胖和调理好身体
    Machine-wide Progress Telerik Fiddler installation has been found at ...Please, use that one or uninstall it ...
    鼻炎治疗之路(转载)
    学医后才知道的小知识...
    一点浩然气,千里快哉风(修炼孟子浩然之气)
    孟尝君的逆袭
    张小龙和张一鸣的对立统一
  • 原文地址:https://www.cnblogs.com/Tony100/p/12072048.html
Copyright © 2011-2022 走看看