GC 问题处理能力能不能系统性掌握?一些影响因素都是互为因果的问题该怎么分析?比如一个服务 RT 突然上涨,有 GC 耗时增大、线程 Block 增多、慢查询增多、CPU 负载高四个表象,到底哪个是诱因?如何判断 GC 有没有问题?使用 CMS 有哪些常见问题?如何判断根因是什么?如何解决或避免这些问题?阅读完本文,相信你将会对 CMS GC 的问题处理有一个系统性的认知,更能游刃有余地解决这些问题,下面就让我们开始吧!

前言

想要系统性地掌握 GC 问题处理,笔者这里给出一个学习路径,整体文章的框架也是按照这个结构展开,主要分四大步。

  • 建立知识体系: 从 JVM 的内存结构到垃圾收集的算法和收集器,学习 GC 的基础知识,掌握一些常用的 GC 问题分析工具。

  • 确定评价指标: 了解基本 GC 的评价方法,摸清如何设定独立系统的指标,以及在业务场景中判断 GC 是否存在问题的手段。

  • 场景调优实践: 运用掌握的知识和系统评价指标,分析与解决九种 CMS 中常见 GC 问题场景。

  • 总结优化经验: 对整体过程做总结并提出笔者的几点建议,同时将总结到的经验完善到知识体系之中。

1. GC 基础

在正式开始前,先做些简要铺垫,介绍下 JVM 内存划分、收集算法、收集器等常用概念介绍,基础比较好的同学可以直接跳过这部分。

2.1 基础概念

  • GC: GC 本身有三种语义,下文需要根据具体场景带入不同的语义:

    • Garbage Collection:垃圾收集技术,名词。

    • Garbage Collector:垃圾收集器,名词。

    • Garbage Collecting:垃圾收集动作,动词。

  • Mutator: 生产垃圾的角色,也就是我们的应用程序,垃圾制造者,通过 Allocator 进行 allocate 和 free。
  • TLAB: Thread Local Allocation Buffer 的简写,基于 CAS 的独享线程(Mutator Threads)可以优先将对象分配在 Eden 中的一块内存,因为是 Java 线程独享的内存区没有锁竞争,所以分配速度更快,每个 TLAB 都是一个线程独享的。
  • Card Table: 中文翻译为卡表,主要是用来标记卡页的状态,每个卡表项对应一个卡页。当卡页中一个对象引用有写操作时,写屏障将会标记对象所在的卡表状态改为 dirty,卡表的本质是用来解决跨代引用的问题。具体怎么解决的可以参考 StackOverflow 上的这个问题 how-actually-card-table-and-writer-barrier-works,或者研读一下 cardTableRS.app 中的源码。

【深入理解JVM】CMS垃圾收集器相关推荐

  1. 深入理解JVM - ZGC垃圾收集器

    如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器和深入理解JVM - Shenandoah垃圾收集器. ZGC(Z Garbage Collector)是一款由Oracle公司研发 ...

  2. 深入理解JVM - Shenandoah垃圾收集器

    如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器. Shenandoah是一款只有OpenJDK才会包含的收集器,最开始由RedHat公司独立发展后来贡献给了OpenJDK,相比G ...

  3. JVM之垃圾收集器回收种类

    JVM之垃圾收集器回收种类 目录 面试常见问题 串行并行并发G1四大垃圾回收方式 如何查看默认的垃圾收集器 JVM默认的垃圾收集器有哪些 GC之7大垃圾收集器详解 1. 面试常见问题 GC垃圾回收算法 ...

  4. JVM常用垃圾收集器

    前言 在上一篇,我们谈到了JVM中的常用垃圾回收算法,并了解了JVM中针对堆区中不同的分代采用不同的垃圾回收算法 在了解了垃圾回收算法之后,很多伙伴不禁在想,既然是分代垃圾回收,自然新生代和老年代的垃 ...

  5. JVM(四)--垃圾收集器

    JVM(四)–垃圾收集器 这篇博客的内容包括: 一.垃圾收集器: 1,Serial 收集器: 2,ParNew 收集器: 3, Parallel Scavenge 收集器: 4,Serial Old收 ...

  6. 面试官:今天还是来聊聊CMS垃圾收集器呗?

    面试官:今天还是来聊聊CMS垃圾收集器呗? 候选者:嗯啊- 候选者:如果用Seria和Parallel系列的垃圾收集器:在垃圾回收的时,用户线程都会完全停止,直至垃圾回收结束! 候选者:CMS的全称: ...

  7. 0 full gc时cpu idle_结合GC日志讲讲CMS垃圾收集器

    1 CMS垃圾收集器介绍 CMS(Concurrent Mark Sweep)收集器旨在获取最短回收停顿时间的并发垃圾收集器.CMS基于"标记-清除"算法实现,并发指的是CMS的垃 ...

  8. CMS垃圾收集器详解(转载)

    文章目录 概念 CMS的GC过程 初始标记 并发标记 并发预处理 重新标记 并发清除 CMS的缺点 总结: 概念 CMS全称为Concurrent Mark Sweep,即 并发标记清除,对比其他的收 ...

  9. CMS垃圾收集器详解

    概述 CMS垃圾收集器是一款优秀的老年代并发垃圾收集器,通过与用户线程并发执行的方式减少GC停顿的时间.本文主要聊一下CMS设计到的相关的数据结构.具体的执行过程.运行中会出现的异常情况. 在CMS之 ...

  10. CMS垃圾收集器和G1垃圾收集器

    CMS CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的老年代收集器.CMS收集器与之前的垃圾收集器最大的特点就是它可以并发清除垃圾. 他的工作流程如下: ...

最新文章

  1. 用python编程代码画图形_python编程:如何使用python代码绘制出哪些常见的机器学习图像?...
  2. 解决ECSHOP后台订单里面点击编辑配送方式时出现的警告问题
  3. 配置Mysql实现主从复制与读写分离
  4. Android 中文件类型与MIME的匹配表
  5. 干货满满!全面详解如何用递归解题!
  6. 单片机交通灯灯c语言程序,关于LED模拟交通灯单片机C语言程序设计
  7. 郝斌数据结构-线性表之单链表程序(C语言版)
  8. 今日头条小程序是什么
  9. 文档被外泄?如何有效管控文档拷贝行为
  10. 家用NAS上安装Domino
  11. yama搜集的超超…全的下载音效的网站,持续更新
  12. 城市交通(动态规划)
  13. redis报错 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  14. 高动态环境下基于随机可及集的Path-Guided APF算法的Motion Planning
  15. 数据分析团队正成为手游公司的标配,但我为什么说解散他
  16. 蓝桥杯历届试题-九宫重排
  17. DEJA_VU3D - Cesium功能集 之 076-缓冲区分析
  18. 屏幕小于6英寸的手机_来!推荐几款6英寸以内“小屏手机”给你
  19. ci框架 乱码 mysql_mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法
  20. java物流管理系统_java web物流管理系统

热门文章

  1. 数据质量稽核工具-datacheck
  2. 云图雅集—优美的诗词
  3. 中国人民公安大学网络对抗技术实验四
  4. HTML5CSS3(附思维导图)
  5. 阜城搜索引擎排名_衡水哪个区最富,哪个县最穷?没想到阜城的排名居然是......
  6. vault mysql_vault学习笔记
  7. 企业知识管理的方式包括哪些方面?
  8. 转:WCAT 压力工具介绍
  9. java图像风格迁移_Python+OpenCV 图像风格迁移(模仿名画)
  10. 记一次行云数据库(CirroData)负载均衡连接方式的实现原理