有些资料中,为区别parallel collector ,将应用与gc并发成为并行,在接下来的文章中,仍称为并发。

—XX:useConcMarkSweepGC,可以用于minor gc和major gc

cms在gc时,也会有两次短暂停,垃圾收集线程与应用线程并发

并发失败:

如果无法及时清理内存和分配内存,也会暂停整个应用。

OutOfMemoryException:

如果超过98%的时间用来gc,但每次恢复内存不足2%,会抛出该异常。与parallel collector不同,

98%时间的统计并不包括‘并发收集’的时间,只计算停止应用线程来收集垃圾的时间

浮动垃圾:

gc线程与应用线程并发,会导致一部分对象在被标记为活对象之后,在本次gc结束前,成为了死对象。这些死对象就是所谓浮动垃圾,在下一次gc时会被清理。因此建议,为浮动垃圾多分配20%的老年代。

暂停:

cms在一个major垃圾收集周期中,会暂停两次,两次都是对根引用直接可达的对象进行标记,因为是应用线程与gc 线程并发,所以,标记两次,以确保正确。

并发阶段:

在两次暂停之间,生成了可达对象(这次包括了非直接可达对象)的图,第二次暂停后,开始清除垃圾。

生成图和清除垃圾都是与应用并发的,此时,应用不会停止,但是吞吐量会下降。

并发收集:

串行垃圾收集器在老年代满了之后,暂停引用开始major gc。cms则会预估垃圾回收和老年代即将填满的时间,在老年代装满之前开始major gc。cms如果因为并发失败引发的暂停开销会比串行收集器的暂停开销更大。

-XX:CMSInitiatingOccupancyFraction=<N>:指定老年代占用多大比例时,开始并发gc

暂停:

cms在major gc会有两次暂停,mark和remark。minor gc也会有短暂停,minor gc和major gc并发进行,为了避免两次暂停重合成一次长暂停,cms会把remark暂停安排在两次minor gc之间。

增长模式在1.8被废弃

(三)CMS Collector的更多相关文章

  1. CMS Collector and G1 Collector

    Understanding the CMS Collector CMS has three basic operations: CMS collects the young generation (s ...

  2. Java虚拟机垃圾回收(三) 7种垃圾收集器

    Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中了解到如何判断对象是存活还是已经死亡?在<Java ...

  3. JVM(三) 垃圾回收时间点和垃圾收集器

      收集器组合章节来自第一篇参考文章,非原创,作者总结地非常好!          分代收集相关概念来自参考文章第二篇,非原创         第二篇参考资料的文章质量很高,推荐阅读! 分代收集(Ge ...

  4. java GC垃圾回收机制G1、CMS

    CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间.对于要求服务器响应速度的应用上,这种垃圾回收器非常适合.在启动JVM参数加上-XX:+UseConcMa ...

  5. G1 collector 介绍

    背景:由于CMS算法产生空间碎片和其它一系列的问题缺陷,HotSpot提供了另外一种垃圾回收策略,G1(也就是Garbage First)算法,该算法在JDK7u4版本被正式推出,官网对此描述如下: ...

  6. CMS垃圾收集器——重新标记和浮动垃圾的思考

    <深入理解java虚拟机 第二版 JVM高级特性与最佳实践>里面提到 CMS 垃圾收集器. CMS 垃圾收集器的垃圾回收分4个步骤: 初始标记(initial mark) 有 STW 并发 ...

  7. The The Garbage-First (G1) collector since Oracle JDK 7 update 4 and later releases

    Refer to http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html for detail. 一些内容复制到这儿 Th ...

  8. Understanding CMS GC Logs--转载

    原文地址:https://blogs.oracle.com/poonam/entry/understanding_cms_gc_logs Understanding CMS GC Logs By Po ...

  9. Garbage Collectors – Serial vs. Parallel vs. CMS vs. G1 (and what’s new in Java 8)

    转自:http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-ja ...

随机推荐

  1. 2.使用Package Control组件安装

    安装Sublime Text 2插件的方法: 1.直接安装 安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->p ...

  2. 使用Maven构建Android项目

    http://www.ikoding.com/build-android-project-with-maven/ 之前一直在做WEB前端项目,前段时间接手第一个Android项目,拿到代码之后,先试着 ...

  3. # asp.net core 1.0 项目结构

    1.环境 开发:VS2015 平台:window 7 2.解决方案级别结构 创建一个ASP.NET 5 Template Empty项目: src:存放项目(projects) global.json ...

  4. Path形状获取字符串型变量数据

    Path形状获取字符串型变量数据: var path = new Path(); path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 ...

  5. WPF DataGrid Control

    Introduction Since .NET 4.0, Microsoft is shipping a DataGrid control that provides all the basic fu ...

  6. ural 1070. Local Time

    1070. Local Time Time limit: 1.0 secondMemory limit: 64 MB Soon the USU team will go to Vancouver to ...

  7. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 D. Delay Time

    Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...

  8. 简单验证码识别(matlab)

    简单验证码识别(matlab) 验证码识别, matlab 昨天晚上一个朋友给我发了一些验证码的图片,希望能有一个自动识别的程序. 1474529971027.jpg 我看了看这些样本,发现都是很规则 ...

  9. 20145304 Java第三周学习报告

    20145304 <Java程序设计>第三周学习总结 教材学习内容总结 1.定义类: 类定义时使用class关键词,建立实例要使用new关键词. 代码如下: /*定义类 书上例子 衣服的型 ...

  10. [Leetcode] Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...