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