文章目录

  • 1. 垃圾回收器关注点
  • 2. 经典垃圾回收器讲解
    • 2.1 CMS收集器
    • 2.2 G1收集器
    • 2.3 ZGC
    • 2.4 shenadoah
  • 3. 其他关注点
    • 3.1 性能指标
    • 3.2 参数设置
    • 3.3 日志分析
  • 4. 垃圾回收器对比
    • 4.1 G1于CMS的对比

1. 垃圾回收器关注点

  1. 关注角度

  1. 需要关注经典垃圾回收器

2. 经典垃圾回收器讲解

2.1 CMS收集器

参数设置

  • -XX:+UseConcMarkSweepGC

2.2 G1收集器

G1收集器的参数

  • -XX: +UseG1GC
  • 设置默认停顿时间,一般设置在200-300ms左右,如果小于这个量级,就很容易出现FullGc从而影响性能。

设计细节

  1. 年轻代的GC

  1. 老年代的GC

  • 此处的重点是采用了原始快照的方式
  • 使用了写前屏障,进行记忆集和卡表的更新。
  • 筛选回收,也就是独占清理需要STW
  1. 混合回收

2.3 ZGC

2.4 shenadoah

重要的点

  • 并发整理,区别于G1的并行整理
  • 不进行分代收集
  • 连接矩阵,放弃了记忆集,不用维护,从而也没有伪共享。使用连接矩阵

3. 其他关注点

3.1 性能指标

  • 吞吐量: 用户线程的时间/用户线程的时间 + GC的时间
  • 延迟:就是垃圾回收停顿用户线程的时间
  • 内存占用情况。
  • 其他:回收频率等

其中延迟和吞吐量还有内存是矛盾三角。随着硬件的发展,吞吐量和内存可以解决,但是延迟却会随之升高。

3.2 参数设置

  • 产看默认的垃圾回收器

    • -XX:+PrintCommandLineFlags
    • jinof -flag UseParNewGC 2343
    • verbose:gc
  • 各种收集器的使用设置

    • -XX:+UseSerialGC
    • -XX:+UseParNewGC // -XX:ParalleGCThreads 限制线程数目
    • Parllel S和O是JDK8种默认的收集器
    • -XX: +UseG1GC
  • 不同收集器的参数设置,具体看各种收集器

  • 一般的配置

    • 老年代配置启动的阈值
    • 多线程配置线程的数目
    • 加上是否进行压缩,整理

3.3 日志分析

1. 关于日志的参数

2. Minor的回收日志

3. Full Gc的日志

总结来说,可以得到下面的信息

  • 年轻代的回收情况
  • 老年代的回收情况
  • 元空间/永久代的回收情况
  • 堆总体的回收请款
  • 回收花费的时间信息

不同回收时间对比

  • user – GC运行时间

  • sys – 阻塞等待系统调用时间

  • real – 运行的真实时间

  • User + sys >= real

4. 垃圾回收器对比

4.1 G1于CMS的对比

  • 工作流程对比

  • 性能对比

    • CMS适合4-6G内存,G1适合6G+内存
    • CMS的最好性能和G1差不多,但是平均性能不如,最坏性能远远低于G1
    • G1可以进行延迟预测,CMS不能
  • 算法对比
CMS G1
并发标记 增量跟新 原始快照
回收算法 标记-清除 标记复制 + 标记压缩
写屏障 写后屏障 写前屏障
  • 并发于并行

    • CMS只有在初始标记和重新标记阶段STW,所以延迟较小
    • G1在初始标记,重新标记,并行回收阶段都STW,延迟较小,但是仍旧有延迟。

JVM<一>内存管理[三]垃圾回收器相关推荐

  1. 详解JVM内存管理与垃圾回收机制5 - Java中的4种引用类型

    在Java语言中,除了基础数据类型的变量以外,其他的都是引用类型,指向各种不同的对象.在前文我们也已经知道,Java中的引用可以是认为对指针的封装,这个指针中存储的值代表的是另外一块内存的起始地址(对 ...

  2. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  3. 详解JVM内存管理与垃圾回收机制2 - 何为垃圾

    随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...

  4. 双/三色标记法的垃圾回收(GC)原理解析和缺陷解决方案(Go,Lua以及jvm的CMS和G1垃圾回收器中使用的回收算法)

    标记-清除算法 go和lua虚拟机以及jvm的CMS和G1垃圾回收器的回收算法的思想均来自于标记-清除算法(Mark-Sweep),它们的gc有重要的两部分: 1.从根节点遍历所有对象,如果可达到,则 ...

  5. 第五篇:初识JVM,JVM自动内存管理

    文章目录 一.前言 1.1 计算机==>操作系统==>JVM 1.1.1 虚拟与实体(对上图的结构层次分析) 1.1.2 Java程序执行(对上图的箭头流程分析) 二.JVM内存空间与参数 ...

  6. python内存管理和释放_《python解释器源码剖析》第17章--python的内存管理与垃圾回收...

    17.0 序 内存管理,对于python这样的动态语言是至关重要的一部分,它在很大程度上决定了python的执行效率,因为在python的运行中会创建和销毁大量的对象,这些都设计内存的管理.同理pyt ...

  7. Java虚拟机JVM的内存管理

    Java虚拟机JVM的内存管理 关键词 一.JVM整体架构 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 名称 作用 特征 配置参数 异常 程序计数器 ...

  8. JVM的内存管理机制详解

    一.为什么要学习内存管理? Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙外面的人想进去,墙里面的人出不来 对于Java程序员来说,JVM给我们提供了自动内存管理机制,不需要既 ...

  9. Java内存管理与垃圾回收

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 整个教程中已经不时的出现一些内存管理和垃圾回收的相关知识.这里进行一个小小的总结. ...

最新文章

  1. R使用tsne进行高维数据可视化实战:二维可视化、三维可视化
  2. java基本数据类型_老杜带你学Java【第六课】
  3. Live Writer测试
  4. 进度条模块tqdm介绍
  5. EasyUI中Panel面板的简单使用
  6. ISE14.7兼容性问题集锦
  7. 前端学习(1535):单一页面的优势
  8. 如何缩小码农和高手的差距
  9. oracle先执行哪个from,Oracle(二)SELECT语句执行顺序
  10. mysql索引和事务_mysql的索引和事务详细解读
  11. 图像去雾:基于暗通道的去雾算法 - 附代码
  12. 5 steps to autotools GNU diction
  13. 施密特将辞任Alphabet执行董事长 转任技术顾问 | 聚焦
  14. 前端找实习岗的7条建议
  15. Mud Puddles ( bfs )
  16. 苹果cms模板_苹果cms怎么做seo?
  17. 开心一刻:今天下班后,我尾随一女同事,为她充当护花使者
  18. 计算机如何连接wifi台式,台式电脑怎么连wifi
  19. java.io.ioexception 设备未就绪_AxisFault faultString: java.io.IOException: 设备未就绪。
  20. 你还记得当年高考时的样子吗?

热门文章

  1. 计算机基础知识中真值是什么,计算机中什么叫机器数,什么叫真值
  2. Ubuntu20.04系统如何安装google chrome浏览器
  3. js实现图片瀑布流布局
  4. vlc html 效果设置,html+vlc 播放多视频
  5. abstract 的基本概念和用法
  6. 鸿蒙 2.0 开始推送,华为 OS 首次登陆手机,亮点槽点都在这里
  7. CPU的后记,程序员的未来之计
  8. DELL液晶显示器如何进入工程模式
  9. DEVONthink Pro/Server 3.6.3 中文版 文件管理用具
  10. 分享微信答题活动制作步骤_制作微信答题活动要注意什么