Java中常见的CMS GC问题分析与解决(一)

目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少。前车之鉴,后事之师,我们搜集了内部各种 GC 问题的分析文章,并结合个人的理解做了一些总结,希望能起到“抛砖引玉”的作用。

关于GC

GC技术是JAVA语言用来进行内存自动管理的,避免了手动管理带来的悬挂指针(Dangling Pointer)的问题,大大提升了开发的效率。在GC技术发展到现在,都是基于三种基础GC算法的组合或应用。
我们有时候在排查问题的时候,比较RT过高、GC耗时过长、CPU消耗过高,或多或少都会伴随着GC的产生,我们在日常工作中,需要去分析与判断,产生这些问题的根因是什么?如何才能避免这些问题的产生。
我们系统普遍使用的CMS GC的算法,我们希望通过我们对我们历史问题的分析,一起来提升GC问题的能力。

1. GC基础知识

现在我们公司JAVA 8版本,所有以下的讨论都是基于这个前提进行讨论的。

1.1. JVM内存


GC 主要工作在 Heap 区和 MetaSpace 区(上图蓝色部分),在 Direct Memory 中,如果使用的是 DirectByteBuffer,那么在分配内存不够时则是 GC 通过 Cleaner#clean 间接管理。

1.2. 内存分配模式

简单的将,就是我们new一个对象的时候,堆内存的分配方式有两种模式。

  • 空闲链表(free list):通过额外的存储记录空闲的地址,将随机 IO 变为顺序 IO,但带来了额外的空间消耗。(ps:CMS)
  • 碰撞指针(bump pointer):通过一个指针作为分界点,需要分配内存时,仅需把指针往空闲的一端移动与对象大小相等的距离。(ps:Serial、ParNew)

1.3. 垃圾收集

什么是垃圾?在程序运行过程中已经使用完毕,且之后不需要在被使用的对象我们称为垃圾。

1.3.1. 垃圾识别

  • Reference Count(引用计数):对每个对象的引用进行计数,每当有一个地方引用它时计数器 +1、引用失效则 -1,引用的计数放到对象头中,当引用计数器为0的时候,认为对象已经失效,即为垃圾。之前有些文章会说,引用计数无法解决循环引用的问题,事实上已经使用Recycler算法解决了。现在现在,高并发的场景下,引用计数变更也要进行昂贵的同步操作,性能较低,现在的语言不使用。
  • Root Searching(根节点搜索法):从Root开始进行对象搜索,可以被搜索到的对象为可达对象,多次标记才能确定一个对象是否存活还是死亡。多次查询之后,所有没有被查询到的对象,都标识为垃圾,可以被回收。这个是现在java虚拟器中采用的主流的垃圾识别方案

1.3.2. GC算法

我们已经知道如何去识别虚拟机产生的垃圾,我们就需要解决如何更快速的识别到并且进行清除。

  • 标记-清除(Mark-Sweep):看名字就很好理解,主要分两个阶段,第一阶段,通过Root Searching的方式,找出所有可达有效对象,并且进行标记;第二阶段,将没有标记的对象进行清除,这个过程对象不发生移动,不进行内存的整理。

  • 标记-整理(Mark-Compact):第一阶段与Mark-Sweep一样;第二阶段,将可达有效对象压缩进行整理,然后清除不可达对象。

  • 复制(Copying):将内存空间分为两块,同一时间只会使用其中一个,每次进行回收的时候,将可达对象复制移动到另一个半区,并且清空内存里面所有的对象,并且将两个内存分区角色进行切换。
GC算法 优点 缺点
标记-清除(Mark-Sweep) 性能比较好,不用移动空间 会有碎片,特别对象比较大的情况
标记-整理(Mark-Compact) 没有碎片,空间利用率高 性能比较低
复制(Copying) 性能最好 空间利用率低,有大量的空间浪费

1.4. 收集器

收集器主要分两个分代收集器分区收集器

1.5. 常用的分析工具

1.5.1. 命令行

  • 标准终端类:jps、jinfo、jstat、jstack、jmap
  • 功能整合类:jcmd、vjtools、arthas、greys

1.5.2. 可视化

  • JConsole、JVisualvm、HA、GCHisto、GCViewer、MAT、JProfiler

我们系统会使用阿里开源的arthas,以及JProfiler。

总结

本章我们将GC的基础做了一个了解,这个只是一个皮毛还有很多东西可以深入的去了解,比如想去了解内存是如何移动的,各个算法是如何去实现的,有兴趣的都可以去了解下。本文转载《Java中常见的CMS GC问题分析与解决(一)》

Java中常见的CMS GC问题分析与解决(一)相关推荐

  1. Java中 9 种常见的 CMS GC 问题分析与解决

    目录 Java中 9 种常见的 CMS GC 问题分析与解决 1. GC 1.1 引言 1.2 概览 2. GC 基础 2.1 基础概念 2.2 JVM 内存划分 2.3 分配对象 2.4 收集对象 ...

  2. java gc日志乱码_Java中9种常见的CMS GC问题分析与解决(四)

    目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部 ...

  3. 美团技术总结:Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  4. 美团技术:Java中9种常见的CMS GC问题分析与解决

    目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部 ...

  5. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候才 ...

  6. (第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候需要做我的智力进步! 感 ...

  7. java中常见的几种内部类,你会几个?(未完)

    点击上方蓝色关注我们! 大家好,我是雄雄,今天给大家介绍的是java中的几种内部类. java中常见的几个内部类,你会几个?我会四个! 在看每个新知识点时,我们不禁有这样或者那样的疑问,比如它是什么? ...

  8. java jvm调优_(第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 这是以前的文章(第3部分,共1部分)的继续:有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的提要 . 事不宜迟,让我们开始使用我们的 ...

  9. (第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    这是以前的文章(第3部分,共1部分)的继续:有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的提要 . 事不宜迟,让我们开始使用我们的下一组博客和视频,印章 ...

最新文章

  1. SQL Server中的命名规范(个人使用)
  2. RNA-seq最新利器——全长转录组测序
  3. Docke的WEB管理工具
  4. android popupwindow 自定义背景,Android PopupWindow背景半透明兼容方案
  5. Python 计算机视觉(十四)—— OpenCV 进行霍夫变换
  6. 小学计算机课的评语,小学信息技术评课稿
  7. iOS中网络请求的使用(GET请求与POST请求)
  8. git中的rebase操作
  9. 热烈庆祝排名进入5000
  10. CCNA考试题库中英文翻译版及答案1
  11. qqxml图片代码_动态图的QQXML代码示例——篮球规范动作示范!
  12. 李南江的前端课程知识点(七)CSS的继承、层叠、优先
  13. 车辆碰撞起火事故的规律特点及常见起火原因 | 事故分析
  14. 【转】艺术设计、数字媒体、环艺、影视动画、摄影、广编专业…等…视频、教程、资讯、图库、作品汇总大全
  15. CentOS6安装rpm时报错“Cannot find a valid baseurl for repo: centos-sclo-rh“的解决办法
  16. 计算机启动时蓝屏后自动重起,升级Win10系统之后一开机就蓝屏且电脑不断重启怎么解决?...
  17. 物联网的通信技术以及Wi-Fi、一键配网技术、BLE、GPRS(2G)、LTE-Cat1 、NB-IoT简介
  18. matlab中心极限定理、高斯分布拟合。
  19. SFC /SCANNOW发现损坏文件应对方法参考
  20. Particle for alexa smart home skill (1)

热门文章

  1. 2022年全球与中国多光谱相机市场现状及未来发展趋势
  2. DownSampling向下采样
  3. 数据库设计课程设计:高校选课管理系统
  4. Nokia E71 常见问题
  5. 递增递减运算符 详解(++、--)
  6. 网络知识点之—UDP协议
  7. facebook app
  8. Ps学习(选择和矩形选框的运用)
  9. 【论文小结】CFC 分类回归不一致问题
  10. 基于c语言的组态软件,工业组态软件中CFC语言的设计实现及语言转换的研究-计算机应用技术专业论文.docx...