JVM<一>内存管理[三]垃圾回收器
文章目录
- 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. 垃圾回收器关注点
- 关注角度
- 需要关注经典垃圾回收器
2. 经典垃圾回收器讲解
2.1 CMS收集器
参数设置
-XX:+UseConcMarkSweepGC
2.2 G1收集器
G1收集器的参数
-XX: +UseG1GC
- 设置默认停顿时间,一般设置在200-300ms左右,如果小于这个量级,就很容易出现FullGc从而影响性能。
设计细节
- 年轻代的GC
- 老年代的GC
- 此处的重点是采用了原始快照的方式
- 使用了写前屏障,进行记忆集和卡表的更新。
- 筛选回收,也就是独占清理需要STW
混合回收
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<一>内存管理[三]垃圾回收器相关推荐
- 详解JVM内存管理与垃圾回收机制5 - Java中的4种引用类型
在Java语言中,除了基础数据类型的变量以外,其他的都是引用类型,指向各种不同的对象.在前文我们也已经知道,Java中的引用可以是认为对指针的封装,这个指针中存储的值代表的是另外一块内存的起始地址(对 ...
- JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)
转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...
- 详解JVM内存管理与垃圾回收机制2 - 何为垃圾
随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...
- 双/三色标记法的垃圾回收(GC)原理解析和缺陷解决方案(Go,Lua以及jvm的CMS和G1垃圾回收器中使用的回收算法)
标记-清除算法 go和lua虚拟机以及jvm的CMS和G1垃圾回收器的回收算法的思想均来自于标记-清除算法(Mark-Sweep),它们的gc有重要的两部分: 1.从根节点遍历所有对象,如果可达到,则 ...
- 第五篇:初识JVM,JVM自动内存管理
文章目录 一.前言 1.1 计算机==>操作系统==>JVM 1.1.1 虚拟与实体(对上图的结构层次分析) 1.1.2 Java程序执行(对上图的箭头流程分析) 二.JVM内存空间与参数 ...
- python内存管理和释放_《python解释器源码剖析》第17章--python的内存管理与垃圾回收...
17.0 序 内存管理,对于python这样的动态语言是至关重要的一部分,它在很大程度上决定了python的执行效率,因为在python的运行中会创建和销毁大量的对象,这些都设计内存的管理.同理pyt ...
- Java虚拟机JVM的内存管理
Java虚拟机JVM的内存管理 关键词 一.JVM整体架构 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 名称 作用 特征 配置参数 异常 程序计数器 ...
- JVM的内存管理机制详解
一.为什么要学习内存管理? Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙外面的人想进去,墙里面的人出不来 对于Java程序员来说,JVM给我们提供了自动内存管理机制,不需要既 ...
- Java内存管理与垃圾回收
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 整个教程中已经不时的出现一些内存管理和垃圾回收的相关知识.这里进行一个小小的总结. ...
最新文章
- R使用tsne进行高维数据可视化实战:二维可视化、三维可视化
- java基本数据类型_老杜带你学Java【第六课】
- Live Writer测试
- 进度条模块tqdm介绍
- EasyUI中Panel面板的简单使用
- ISE14.7兼容性问题集锦
- 前端学习(1535):单一页面的优势
- 如何缩小码农和高手的差距
- oracle先执行哪个from,Oracle(二)SELECT语句执行顺序
- mysql索引和事务_mysql的索引和事务详细解读
- 图像去雾:基于暗通道的去雾算法 - 附代码
- 5 steps to autotools GNU diction
- 施密特将辞任Alphabet执行董事长 转任技术顾问 | 聚焦
- 前端找实习岗的7条建议
- Mud Puddles ( bfs )
- 苹果cms模板_苹果cms怎么做seo?
- 开心一刻:今天下班后,我尾随一女同事,为她充当护花使者
- 计算机如何连接wifi台式,台式电脑怎么连wifi
- java.io.ioexception 设备未就绪_AxisFault faultString: java.io.IOException: 设备未就绪。
- 你还记得当年高考时的样子吗?
热门文章
- 计算机基础知识中真值是什么,计算机中什么叫机器数,什么叫真值
- Ubuntu20.04系统如何安装google chrome浏览器
- js实现图片瀑布流布局
- vlc html 效果设置,html+vlc 播放多视频
- abstract 的基本概念和用法
- 鸿蒙 2.0 开始推送,华为 OS 首次登陆手机,亮点槽点都在这里
- CPU的后记,程序员的未来之计
- DELL液晶显示器如何进入工程模式
- DEVONthink Pro/Server 3.6.3 中文版 文件管理用具
- 分享微信答题活动制作步骤_制作微信答题活动要注意什么