jvm垃圾回收

作者: 我犟不过你 | 来源:发表于2020-08-11 10:46 被阅读0次

    java总10种垃圾回收机制;

    (本文内容全部来自马士兵老师的课程,如想细致学习,请到腾讯课堂搜索马士兵教育相关视频)

    如何找到垃圾?

    1、reference count 引用计数 (python)

        缺点:无法找到环形垃圾

    2、root searching  根可达性算法 (jvm)

    垃圾回收算法?

    1、mark sweep 标记清理

        缺点:内存碎片化

    2、copy 复制算法 内存分成两半,来回复制

        缺点:浪费内存

    3、mark compact 标记压缩 碎片整理

        缺点:效率偏低

    分代模型

    1、新生代 (copy算法)

        a)eden (伊甸)

        b)survivor(幸存) 两个分区 

    2、老年代

    new对象的内存流程

    配对使用回收器

    发展路线,随着内存越来越大来进行演进,逐渐出现新的;垃圾回收机制

    STW(stop the world)

    1、serial + serial old :单线程串行    存在STW

    2、ps + po (parallel scavenge + parallel old):并行    (jdk1.8默认)存在STW,内存越大效率越低

    3、ParNew(与ps相同,不同在于配合cms使用) + CMS (concurrent mark sweep首先开始并发回收)

        CMS垃圾回收过程: 

            1)init mark 先进行初始标记 ,STW,先找到最初的引用,时间非常短

            2)concurrent mark 并发标记,工作线程和垃圾回收线程的并发

            3)remark 重新标记(最终标记),对于在并发标记过程中已标记的对象,可能存在再次被引用的情况,垃                 圾回收会对这个对象误删除(漏标或者错标) ,STW

            4)concurrent sweep 并发清除

    4、G1 :逻辑分代,物理不分代,每个区域成为region,其中每个region可能是eden,survivor或者old。

                从G1开始,不再使用分代。

    三色标记算法:白灰黑(三色扫描)

    CMS:incremental update

                ps:存在问题,没有任何版本默认垃圾回收器是cms,标记清除mark sweep导致碎片化占用空间

                当碎片化非常严重的时候,cms采用serial old清理老年代,导致STW,一旦产生卡顿,后果很严重

    G1 :SATB (snapshot at th beginning)

    ZGC:颜色指针

    常用的调优命令

    java -XX:+PrintCommandLineFlags -version  --jvm启动时配置的参数

    java -XX:+PrintFlagsFinal -version                 --查看最终参数

    jps                                                                   --查看java进程的id

    jinfo "pid"                                                         --查看进程的具体明细参数

    jstat "pid"                                                         --观察进程的jvm情况,命令后添加毫秒数可动态观察

    相关文章

      网友评论

        本文标题:jvm垃圾回收

        本文链接:https://www.haomeiwen.com/subject/mqpuihtx.html