CMS前世今生
CMS一直是面试中的常考点,今天我们用通俗易懂的语言简单介绍下。
垃圾回收器为什么要分区分代?

如上图:JVM虚拟机将堆内存区域分代了,先生代是朝生夕死的区域,老年代是老不死的区域,不同的年代对象有不同特性,因此需要不同的垃圾收集器去处理。如下图,黑竖线左边的区域都是分代垃圾收集器,G1之后内存就不分代了。

单线程垃圾收集器:Serial + Serial Old
Serial(SY),Serial Old(SO)是单线程垃圾收集器组合,垃圾收集线程是单线程的,随着现代内存区域越来越大,SY+SO组合已经越来越少了。垃圾收集的单线程需要STW时间无疑越长。这种组合比较合适较早JDK版本。如下图,用户线程表示应用程序处理过程,垃圾收集线程表示垃圾线程清理垃圾过程,此阶段应用程序是需要等待垃圾线程STW的。

多线程垃圾收集器:PS+PO
前面我们说了,单线程垃圾收集器缺点就是当内存区域变大,收集效率会很低,那OK,摇身一变,如下图,多线程垃圾处理器。

值得注意的是:PS+PO组合是JDK1.7,JDK1.8默认垃圾收集器。通过java -XX:+PrintCommandLineFlags命令可以在Dos界面查看。如下图,该命令可以查看JVM初始化的默认参数。比如:-XX:InitialHeapSize表示初始化堆大小。

为啥蹦出来个CMS+ParNew
并行处理有了,CMS+ParNew又是干嘛的?其实PO关注是吞吐量,而CMS关注是缩短STW时间。而CMS处理流程更复杂,至于ParNew,其实约等于PS,如果你注意最上面一个图,你会发现PS年轻代无法和CMS组合。所以就多出来了一个ParNew。
介绍CMS阶段
CMS,全名称Concurrent Mark Sweep,中文释义并发标记清除,从名字上可以看出算法思想使用标记清除算法,下面我们看看CMS简化处理流程。

- 初始标记。只标记GC root可达的第一个节点。会短暂的STW。
- 并发标记。用户线程和垃圾线程同时进行。垃圾线程会继续向下寻找GCroot,不会有STW。但也会有两个问题。
- 多标:之前不是垃圾,现在线程出栈引用断开了变成了垃圾。也称为浮动垃圾。
- 错标:之前已经被标注是垃圾,但现在重新引用。
- 重新标记。STW时间一般低于200毫秒。
- 并发清除。并发清除时,因为用户线程和垃圾线程一起工作,如果CMS线程异常,可能会触发SO单线程执行。程序可能会特别缓慢。
劣势:碎片严重。
总结
主要简单介绍了分代垃圾回收器,特别介绍了cms执行过程,G1留下次再说吧。好了,文章有地方还写的不清晰希望亲们加以指正和点评,喜欢的请点赞加关注哦。点关注,不迷路,我是叫练,边叫边练,公众号【叫练】,微信号【jiaolian123abc】。祝大家生活愉快。
CMS前世今生的更多相关文章
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Kooboo CMS技术文档之五:站点配置管理
站点关系 管理站点间的关系,站点可以有子站点,子站点继承父站点的部分配置数据,同时子站点还可以根据需要,本地化由父站点继承而来的数据.通过继承和本地化,可以让子站点在用最小的改动代价,来完成一个与父站 ...
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...
- Kooboo CMS技术文档之二:Kooboo CMS的安装步骤
在IIS上安装Kooboo CMS Kooboo CMS安装之后 安装的常见问题 1. 在IIS上安装Kooboo CMS Kooboo CMS部署到正式环境相当简单,安装过程是一个普通MVC站点在I ...
- Kooboo CMS技术文档之一:Kooboo CMS技术背景
语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...
- Kooboo CMS技术文档之四:Kooboo CMS的站点组成部分
Kooboo CMS本着功能独立分离的原则,将站点分为三部分组成:用户管理,站点管理和内容数据库管理.各个功能之间既可独立使用,也可以容易组成在一起形成一个完整的系统. 用户管理 管理整个系统内的用户 ...
- Kooboo CMS技术文档之三:切换数据存储方式
切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...
- docker4dotnet #1 – 前世今生 & 世界你好
作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连p ...
随机推荐
- React Security Best Practices All In One
React Security Best Practices All In One Default XSS Protection with Data Binding Dangerous URLs Ren ...
- text image & 思维脑图 & xmind
text image & 思维脑图 text-image 图片读 rgb 值->灰度值->字符; rgb->灰度值的公式 google 一下就有,灰度值传字符部分,从灰度值从 ...
- css & auto height & overflow: hidden;
css & auto height & overflow: hidden; {overflow: hidden; height: 100%;} is the panacea! {溢出: ...
- export excel
export excel sheet.js https://sheetjs.com/ https://github.com/SheetJS/sheetjs excel.js https://www.n ...
- how to get window width in javascript
how to get window width in javascript how to get window width in js How to Detect Screen Resolution ...
- asm 查看字节码
a.asm global Start section .text inc dword [esi] push edi mov edi,[esp+0x14] λ nasm -f win32 a.asm - ...
- Mosquitto
mosquitto可连接远程服务器及本地服务器. mosquitto可在一个节点内建立一个连接用于收发,也可在一个节点内建立多个连接用于收发.建立一个连接用于收发时,会有初始部分帧的延迟.(可能由于内 ...
- hadoop的lzo支持
目录 1.下载相关文件: 2.Configure LZO to build a shared library (required) and use a package-specific prefix ...
- Go 去找个对象吧
前言 我的读者中应该大部分都是 Java 从业者,不知道写 Java 这些年是否真的有找到对象? 没找到也没关系,总不能在一棵树上吊死,我们也可以来 Go 这边看看,说不定会有新发现. 开个玩笑,本文 ...
- python实现斑马打印机网络打印
最近一个礼拜调研了下斑马打印机怎样实现网络打印. 缘起: 之前实现打印方式是直接使用USB接口连接PC,使用串口通讯提供一套打印服务,在系统界面配置相关参数,即可调用打印服务: 后来业务需求变化,现场 ...