JVM(十一):JVM垃圾回收器和算法


prtyaa
prtyaa 2023-12-28 16:08:13 53901
分类专栏: 资讯

之前说过GC算法,现在来回顾一下。

标记清除,复制,标记压缩(整理)这三个垃圾回收算法。

 

标记清除:(不适合eden区)

优点:

  • 算法相对简单,
  • 在存活对象比较多的情况下效率较高。从GCRoot出发,存活的对象比较多,清理的比较少.

缺点:

  • 需要两边扫描,效率偏低。不整理不压缩,容易产生碎片不方便申请连续内存给对象。
  • 但是因为eden区长时间存活的对象比较少,所以标记清除算法并不适合eden区。

复制算法:(适合eden区)

GCRoot找到有用的对象,把这部分对象拷贝到另一块内存里去。

优点:

  • 这就很适合eden区,eden区的对象存活的比较少,复制存活对象的时候比较容易。
  • 而且只扫描一次效率高,没有碎片

缺点:

  • 空间浪费,移动复制对象,需要调整对象引用

标记压缩(整理):

优点:

  • 不会产生碎片,方便对象分配,不会产生像复制算法那样内存减半。

缺点:

  • 需要扫描两次,需要移动对象(如果需要多线程移动内存块,还需要同步,效率低),效率偏低

对象分配有可能是在栈上

栈上分配的是:

  • 线程私有的小对象
  • 没有逃逸
  • 支持标量替换
  • 无需调整的对象

线程本地分配TLAB(Thread Local Allocation Buffer)

  • 占用eden区,默认1%
  • 多线程的时候不用竞争eden区就可以申请空间,提高效率
  • 小对象
  • 无需调整

常见的垃圾回收器:

常见的有三种组合:(年轻代+老年代)

  1. Serial + Serial Old (单线程回收在年轻代+单线程回收在老年代)
  2. Paraller Scavenge + Paralle Old(多线程年轻代+多线程老年代)
  3. ParNew+CMS(多线程年轻代+多线程老年代)

G1 只是在逻辑上分年轻代和老年代。

前三种不仅在逻辑上分了年轻代和老年代,在物理上也把内存划分为年轻代和老年代

注意了,垃圾回收器和GC算法是两个东西。不要弄混了

第一种组合:Serial + Serial Old (单线程回收在年轻代+单线程回收在老年代)

  • Serial :(发生在年轻代的单线程垃圾回收器)当回收的时候,工作线程(用户线程)就停了,回收是单线程的。stw存在,而年轻代一般使用的是复制算法
  • Serial Old:(发生在老年代的垃圾回收器)当回收的时候,工作线程(用户线程)就停了,回收是单线程的。stw存在,老年代采用的是标记清除或者标记整理算法

第二种组合 (默认的)

PS+PO :Paraller Scavenge + Paralle Old (多线程回收年轻代+多线程回收老年代)

Paraller Scavenge:(发生在年轻代的单线程垃圾回收器)当回收的时候,工作线程(用户线程)就停了,回收是多线程的。stw存在,而年轻代一般使用的是复制算法

Paralle Old:(发生在老年代的垃圾回收器)当回收的时候,工作线程(用户线程)就停了,回收是多线程的。stw存在,老年代采用的是标记整理算法

第三种组合

ParNew+CMS(多线程回收年轻代+多线程回收老年代)

ParNew :和上面一样,采用复制算法多线程回收年轻代。存在stw。

CMS:用于老年代,用户线程---初始标记---用户线程和并发标记同时进行---重新标记---用户线程和并发清理,可以看出 concurrent的意思是在做并发标记和并发清理的时候此时用户线程是不停止的。 所以在初始标记和重新标记阶段还是有stw。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31771
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2950
【软件正版化】软件正版化工作要点  2872
统信UOS试玩黑神话:悟空  2833
信刻光盘安全隔离与信息交换系统  2728
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1261
grub引导程序无法找到指定设备和分区  1226
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  158
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!