c++ 多线程 垃圾回收器_JVM GC回收器

0x01: 串行回收器

  • 概念

单线程进行垃圾回收的回收器(单线程、独占性)

5a0cea6b52d359e485d01eddd19abe25.png
  • 分类

新生代串行回收器

老年代串行回收器

标记压缩算法

  • 命令

-XX:+UseSerialGC :新生代老年代都使用串行回收器

-XX:+UseParNewGC :新生代使用ParNew回收器,老年代使用串行回收器

-XX:+UseParallelGC :新生代使用ParallelGC回收器,老年代使用串行回收器

0x02: 并行回收器

  • 概念

多线程进行垃圾回收的回收器

  • 分类

(1)新生代 ParNew 回收器

只是简单的将串行回收器多线程化

-XX:+UseParNewGC :新生代使用 ParNew 并行回收器,老年代串行回收器

-XX:+UseConcMarkSweepGC :新生代使用ParNew 并行回收器,老年代使用 CMS

-XX:ParallelGCThreads :设置多线程数量,最好与 CPU 个数保持一致(CPU < 8 ),或者 3 + ((5*cpu_count)/8)

(2)新生代ParallelGC 回收器

和 ParNew 回收器差不多,不过更关注吞吐量

-XX:+UseParallelGC :新生代使用 ParallelGC 回收器,老年代使用串行回收器

-XX:+UseParallelOldGC:新生代使用 ParallelGC 回收器,老年代使用 ParallelOldGC 回收器

-XX:MaxGcPauseMillis :设置最大的垃圾收集停顿时间(大于 0 的整数)

-XX:GCTimeRatio :设置吞吐量(0~100 整数,假如 GCTimeRatio的值为n,系统将花费不超过1/(1+n)的时间用于垃圾回收,默认值是 19)

-XX:+UseAdaptiveSizePolicy :打开自适应 GC 策略

(3)老年代 ParallelOldGC 回收器

使用标记压缩算法,用于老年代

0x03: CMS 回收器

  • 概念

Concurrent Mark Sweep 并发标记清除(多线程并且用的标记清除算法),会造成大量的内存碎片,离散的可用空间无法分配较大的对象

  • 流程
54fe12893150fa72595869922787d038.png
  • 参数

-XX:-CMSPrecleaningEnabled : 不进行预清理

-XX:+UseConcMarkSweepGC : 启动 CMS 回收器,默认线程数(ParallelGCThreads + 3) /4

-XX:ConcGCThreads -XX:ParallelCMSThreads : 设置并发线程数(并发是收集器和应用程序交替执行,并行是应用程序停止,多个线程一起执行 GC,并行回收器不是并发的是并行的)

-XX:CMSInitiatingOccupancyFraction : 回收阈值,默认 68(老年代空间利用率达到 68%时,执行一次 CMS 回收,如果 CMS 回收失败,则虚拟机将启动老年代串行回收器,导致应用程序中断)

如果内存增长缓慢,则增大此值,减少老年代回收次数;如果内存增长过快,则降低此值,避免触发老年代串行回收器

-XX:+UseCMSCompactAtFullCollection : CMS 垃圾回收后进行一次碎片整理(单线程)

-XX:+CMSFullGCsBeforeCompaction : 进行多少次 CMS 后,进行一次内存压缩

-XX:+CMSClassUnloadingEnabled : 让 CMS 可以回收 Perm 区

0x04: G1 回收器

  • 概念

Garbage-First 回收器,jdk1.7引入,采用分代+分区算法,用于替代CMS

  • 特点

并行性

多个 GC 线程同时工作

并发性

与应用程序交替执行,不会阻塞应用程序

分代 GC

同时工作在年轻代和老年代

空间整理

区别于 CMS 的简单标记清除,若干次后才碎片整理,G1 每次回收都复制对象,减少空间碎片

可预见性

G1 采用分区,缩小回收范围,更好控制停顿时间

  • 流程
6b7d31fcfd3bdddbd775632d0ea97f59.png
  • G1 新生代 GC
6c17472c997a50cfa0bcf0db5a88be03.png

新生代 GC 只回收 E 区和 S 区,一旦 E 区占满,就会立刻 GC,回收后所有的 E 区被清空,S 区只留一个,O 区增多(E,S 区对象晋升到老年代)

  • G1并发标记
9a8601756a9f0b39f02658734c76c5d6.png
  • G1 参数

-XX:MaxGCPauseMillis : 设置目标最大停顿时间

-XX:ParallelGCThreads : 并行回收时,GC 工作数量

XX:InitiatingHeapOccupancyPercent : 堆使用率达到多少,触发并发标记周期执行(默认 45)

source:http://mousycoder.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值