加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

GC收集器理解

发布时间:2020-12-15 07:28:24 所属栏目:Java 来源:网络整理
导读:GC的收集器种类: ? ?收集器存在连线的说明他们可以配合使用。 ? 新生代 1.串行GC(serial)垃圾回收器 单线程收集器,必须暂停所有的工作线程直到结束: ? 最古老,稳定效率高的垃圾回收器 对应的JVM参数是: -XX:+UseSerialGC 开启后会使用:Serial(Young

GC的收集器种类:

?

?收集器存在连线的说明他们可以配合使用。

?

新生代

1.串行GC(serial)垃圾回收器

  单线程收集器,必须暂停所有的工作线程直到结束:

?

最古老,稳定效率高的垃圾回收器

对应的JVM参数是: -XX:+UseSerialGC

开启后会使用:Serial(Young区用) + Serial(Old区用)的收集器组合,表示新生代,老年代都会使用串行的垃圾回收器,

新生代使用复制算法,老年代使用标志-整理算法

参数示例:? -Xms10m? -Xmx10m? -XX:PrintGCDetails? -XX:UseSerialGC? ?

?

?

2.并行GC(ParNew)收集器

使用多线程进行垃圾回收,在垃圾回收时,会 STW暂停其他所有工作线程直到他结束。

?

?

?

ParNew收集器就是Serial收集器的新生代的并行多线程版本。最常见的是

配合老年代的CMS GC工作。其余行为和Serial行为一样,同样需要暂停所有线程。

开启后:新生代使用并行垃圾回收,老年代使用串行垃圾回收。

JVM参数:-XX:+UseParNewGC?

JDK8 的默认垃圾回收器,ParNew+Serial这条线已经不被使用,官方已经说这样不好。

备注: -XX:ParallelGCThreads? 限制线程数,默认启动和CPU数目相同的线程数

?3.Parallel Scavenge(Parallel GC)

?

关注:(适用与计算型场景,无需考虑停顿时间,直接开起多个线程)

可控吞吐量 = (运行代码时间/ 运行代码垃圾手机时间)?

程序运行100分钟,垃圾收集器1分钟,吞吐量为99%

自适应调节策略:根据当前系统的运行情况收集性能,监控信息,动态调整这些参数提供合适的停顿时间(-XX:MaxGCPauseMillis)和吞吐量

JVM参数:-XX:+UseParallelGC

? ? -XX:ParallelGCThreads =? 数字N,N表示启动多少个GC线程

? ? cpu线程数? >? 8? ? ? ? ? ? ? N = 5/8?

? ? cpu线程数? <? 8? ? ? ? ? ? ?N = 实际cpu线程数

?

老年代垃圾收集器:

SerialOld(单线程老年代)

作用: 作为老年代版本CMS垃圾收集器的 后备收集器

?

CMS(并发标记清除)

Concurret Mark Sweep:是一种以获取最短回收停顿时间为目标的收集器。

适合应用在互联网或B/S系统的服务器上,这类应用重视服务器的相应速度,希望系统停顿时间最短。

虽然JDk后的G1出现了对停顿时间可控的功能,但是对于小于32G的场景,CMS还是中小型公司的首选。

?

并发收集低停顿,并发指的是与用户线程一起执行。

CMS必须在老年代堆内存耗尽前,完成GC回收。否则将触发担保机制,使用串行回收,将造成更大的停顿时间。

?

JVM参数:-XX:+UseConcMarkSweepGC 开启参数,会自动将 -XX:+UserParNewGC打开、

开启参数后:;使用ParNew(Young)+CMS(Old)+SerialOld(CMS出错启用)

?

初始标记(initial mark): 标记一下GC Roots能直接关联对象,速度很快,需要暂停所有工作线程

并发标记(concurrent mark):

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读