java cms 垃圾回收_Java垃圾回收 CMS垃圾回收算法 后台系统推荐使用CMS

本文详细介绍了Java的CMS(并发标记清除)垃圾回收算法,包括其内存状态、与其他收集器的区别以及CMS的主要特点。CMS以并发收集和低停顿时间为优点,但存在内存碎片和并发阶段降低吞吐量的问题。CMS垃圾回收过程包括初始标记、并发标记、重新标记和并发清除四个阶段。当CMS期间内存不足时,会导致Concurrent Mode Failure并触发Full GC。
摘要由CSDN通过智能技术生成

一、Java垃圾回收

基本概念:

1 Committed内存,jvm向操作系统申请的内存。

2 Used内存,jvm分配给对象使用的内存。

3 所以Committed >= Used。

4 当Committed不足时,jvm向系统申请,如果超过jvm配置的最大限制则抛出OutOfMemoryError异常。

jvm内存状态查询代码:GCUtils.java

不同垃圾回收算法对应的jvm内存状态如下:

Serial收集器,java -server -XX:+UseSerialGC gc.GCUtils,windows默认是串行:

Copy: gc count 0, gc time 0.

[Eden Space, Survivor Space]

MarkSweepCompact: gc count 0, gc time 0.

[Eden Space, Survivor Space, Tenured Gen, Perm Gen]

ParNew收集器,java -server -XX:+UseParNewGC gc.GCUtils,ParNew是串行的多线程版本:

ParNew: gc count 0, gc time 0.

[Par Eden Space, Par Survivor Space]

MarkSweepCompact: gc count 0, gc time 0.

[Par Eden Space, Par Survivor Space, Tenured Gen, Perm Gen]

Parallel收集器,java -server -XX:+UseParallelGC gc.GCUtils,linux默认是并行:

PS Scavenge: gc count 0, gc time 0.

[PS Eden Space, PS Survivor Space]

PS MarkSweep: gc count 0, gc time 0.

[PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]

CMS收集器,java -server -XX:+UseConcMarkSweepGC gc.GCUtils:

ParNew: gc count 0, gc time 0.

[Par Eden Space, Par Survivor Space]

ConcurrentMarkSweep: gc count 0, gc time 0.

[Par Eden Space, Par Survivor Space, CMS Old Gen, CMS Perm Gen]

CMS(并发标记清除)垃圾回收特点:

优点:并发收集、低停顿

缺点:产生大量内存碎片、并发阶段会降低吞吐量

CMS垃圾回收过程:

1 初始标记(CMS-initial-mark),SWT(Stop The World),只扫描root对象直接关联的对象,单线程扫描。

2 并发标记(CMS-concurrent-mark),与应用程序一起工作,通过直达对象扫描全部的对象,消耗时间最长。

3 重新标记(CMS-remark),STW,修正并发标记时由于应用程序还在并发运行产生的对象修改,多线程扫描。

4 并发清除(CMS-concurrent-sweep)

5 并发重置状态等待下次CMS的触发(CMS-concurrent-reset)

关于Concurrent Mode Failure:

CMS期间应用程序申请不到内存,会输出Concurrent Mode Failure,然后进行一次Full GC。

Copy:复制回收算法,浪费一半内存,但回收效率高。

ParNew:Copy的多线程版本。

Parallel收集器:算法同ParNew,但可以动态调整参数提供更大吞吐量。

MarkSweepCompact:结合标记清除和复制算法的优点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值