jvm垃圾收集器汇总
1.吞吐量和延时
吞吐量:吞吐量指的是cpu的利用时间,计算公式是 运行用户代码时间 / (用户代码时间 + 垃圾收集时间),吞吐量越大说明cpu的利用率越大.
延时:延时指的是停顿时间,用户代码不能执行的时间,STW
吞吐量优先和延时优先
吞吐量优先适用于运算任务之中,只是在乎CPU的利用时间,可以更快地完成运算任务.
延时优先更适用于交互任务中,更短的等待时间可以提高用户的体验
吞吐量和延时之间的关系
用GC来说
想要更大的吞吐量就要避免没必要的GC,但是总有避免不了的GC,这个避免不了的GC要处理的垃圾就会变多,处理过程变得复杂,停顿时间就会变长.
想要更短的挺短时间就要增多GC的次数,让每次需要处理的垃圾都平均起来,但是GC次数变多就回到了原点,吞吐量下降了.
垃圾收集器(每个垃圾收集器都没有明确的好与不好,只有适合和不适合)
1.Serial收集器
一个单线程的垃圾收集器,适用STW必须暂停用户进程,当进行垃圾收集的时候是无法对外提供服务的,同时进行垃圾回收的时候适用单线程.
适用场景:新生代
优点:简单而高效,专注于垃圾回收,没有线程上下文切换的资源浪费
2.parNew收集器
是Serial的多线程版本,在新生代GC的时候适用多线程进行垃圾回收,同时是唯一一个能与CMS收集器一起适用的垃圾收集器
适用场景:新生代
优点:能和CMS收集器一起适用,同时在多个CPU的时能有更高效的收集效率
3.Parallel Scavenge收集器
一个吞吐量优先的垃圾收集器,新生代垃圾收集器,收集也是使用多个线程.
适用场景:新生代(使用复制算法)
优点:提供两个参数用于精确地控制吞吐量,分别是控制最大垃圾收集停顿时间 -XX:MaxGCPauseMillis参数和直接设置吞吐量大小: -XX:GCTimeRatio参数.
自带GC自适应调节策略 -XX:+UseAdaptiveSizePolicy参数开启之后,不需要关注新生代eden和s0和s1之间的比例,还有晋升老年代的对象的大小 -XX:PretenureSizeThreshold,虚拟机会自动进行调整为了更好的提高吞吐量。
4.Serial Old收集器
从名字上看就是Serial的老年代垃圾收集器,使用单线程标志-整理算法
适用场景:老年代
优点:标志整理算法自带的空间连续
5.ParallelOld收集器
一款吞吐量优先的老年代垃圾收集器,同时使用多线程的标记-整理算法
使用场景:老年代(标记-整理算法)
优点:吞吐量优先可以充分利用CPU,在一些注重吞吐量和CPU资源敏感的情况下可以事用Parallel Scanvenge和ParallelOld的组合
6.CMS收集器
第一款在进行垃圾收集的时候可以对外提供服务,同时是一款延时优先的垃圾收集器。
使用场景:老年代(标记-清除算法)
优点:在进行垃圾收集的时候可以对外提供服务,同时他是延时优先的,在交互类型中用户会有一个良好的体验。
流程图

初始标记:单线程就是标记一下GCRoots能够直接到达的对象
并发标记:和用户线程并发的进行GCRoots的可达性分析
重新标记:标记在并发标记过程中用户线程造成的更改
并发清除:和用户进行并发的进行垃圾回收
明显缺点:
1.CPU过于敏感,清除线程的数量 = (cpu个数 + 3) / 4 (cpu 个数 > 4)资源占用率随着cpu个数升高而降低(cpu个数 < 4) 资源占用就会比较高
2.无法处理浮动垃圾
3.cms使用标记清除算法,自带的就是空间碎片问题
7.G1垃圾收集器
将jmm分成了一个个的Region,一般是2048个,大小由堆大小确定
停顿时间优先的,为了替代CMS而出现的,弥补了CMS的大部分缺点,同时可以自己设置停顿时间,在停顿时间里面进行回收,回收垃圾最多的Region
使用分代算法,每个Region分为E,S,O等区域同时有一个H区存储大对象,默认大小超过Region的一半就会进入H区
特点:
1.并发并行:充分利用多个CPU,使用并发来继续执行用户线程
2,分代收集
3.空间整合:基于标记-整理算法
4.可预测的停顿
jvm垃圾收集器汇总的更多相关文章
- JVM调优:HotSpot JVM垃圾收集器
HotSpot JVM垃圾收集器 - Snooper - 博客园https://www.cnblogs.com/snooper/p/8718478.html
- JVM垃圾收集器-Parallel Scavenge收集器
今天我给大家讲讲JVM垃圾收集器-Parallel Scavenge收集器 Parallel Scavenge收集器 Parallel Scavenge收集器也是一个新生代收集器,它也是使用复制算法的 ...
- 7种JVM垃圾收集器特点,优劣势、及使用场景
今天继续JVM的垃圾回收器详解,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 一.常见的垃圾收集器有3类 1.新生代的收集器包括 Serial PraNew Pa ...
- 【006】【JVM——垃圾收集器总结】
Java虚拟机学习总结文件夹 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论.垃圾收集据是内存回收的详细实现.Java虚拟机规范中对垃圾收集器应该怎样实现没有规定.不同的厂 ...
- 第五章 JVM垃圾收集器(1)
说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法> 1.七种垃圾收集器 Serial(串行GC)-- 复制 ParNew(并行GC)-- ...
- 第六章 JVM垃圾收集器(2)
上一章记录了几种常见的垃圾收集器,见<第五章 JVM垃圾收集器(1)> 1.G1 说明: 从上图来看,G1与CMS相比,仅在最后的"筛选回收"部分不同(CMS是并发清除 ...
- JVM垃圾收集器(1)
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法& ...
- 5种JVM垃圾收集器特点和8种JVM内存溢出原因
先来看看5种JVM垃圾收集器特点 一.常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Serial ParNew Parallel Scavenge 老年代收集器: Serial O ...
- 7种 JVM 垃圾收集器特点、优劣势及使用场景(多图)
7种 JVM 垃圾收集器特点.优劣势及使用场景(多图) mp.weixin.qq.com 点击上方"IT牧场",选择"设为星标"技术干货每日送达! 一.常见垃 ...
- JVM垃圾收集器
JVM中垃圾的回收由垃圾收集器进行,随着JDK的不断升级,垃圾收集器也开发出了各种版本,垃圾收集器不断优化的动力,就是为了实现更短的停顿. 下面是7种不同的分代收集器,如果两个收集器之间有连线,则表示 ...
随机推荐
- 37.Spring注解相关面试题
1.@Resource和@Autowired 区别 2.@Repository.@Component.@Service.@Controller 区别
- 微信小程序引入外部字体(字体图标过大,引入外链)
1.把字体放在服务器上,因为字体图标比较大,小程序只支持2m 2.字体加载 3.检测是否加载成功(可能会存在https和http问题,防止跨域)
- vue3中使用vite-ts构建项目时tsconfig.json的配置
在上一次创建vue3项目在tsconfig.json中配置了文件别名以后,格式校验提示 es3什么鬼,便去看了一下tsconfig.json的配置,以此学习 { "compilerOptio ...
- MySQL单表存储上限
-------------- mysql的上限不是单纯的根据内容的大小决定的.跟数据的条数也有关系. 可以把mysql理解成一个服务器.处理数据的通道的流量有限.(这段瞎编的) MySQL本身并没有对 ...
- backward函数中gradient参数的一些理解
当标量对向量求导时不需要该参数,但当向量对向量求导时,若不加上该参数则会报错,显示"grad can be implicitly created only for scalar output ...
- 【Linux】Ubuntu随笔
Ubuntu声明环境变量时使用 export JAVA_HOME=/xx/xx/xx,当需要引用时要写成 $JAVA_HOME 所以配置环境变量并声明方法如下: vim ~/.bashrc expor ...
- SpringCloud设置随机端口后的问题
问题描述 SpringCloud服务提供者,设定了随机端口配置后,在EurekaServer中的注册端口.Tomcat的web端口.运行中获取到的server.port配置端口,共出现了4个不同的端口 ...
- openwrt扩容
方法二.三记得先使用Linux系统打开 GParted -- Download 方法三偏移地址获取: 1. 运行的openwrt安装losetup 2. 安装完毕后执行:losetup 获取偏移地址. ...
- Shell写脚本关于ssh执行jar包,需要刷新JDK路径的问题
比如脚本中下面这一段 ssh $i "java -jar /applog/$PROJECT/$APPNAME --server.port=$SERVER_PORT >/dev/null ...
- Verilog 变量声明与数据类型二
Verilog 变量声明与数据类型二 上节介绍了wire,reg数据类型及其用法,并对变量定义中的向量的定义及使用做了说明.本节主要介绍其它几种类型.常用的有如下几种:整数integer,实数 rea ...