JVM垃圾收集器介绍
垃圾回收算法是GC的方法论,垃圾收集器就是内存回收的具体实现。
一、Serial 收集器
单线程收集器,在进行GC时,必须暂停所有的工作线程(Stop The World),直到GC收集结束。
缺点:“Stop The World”给用户带来了不好的体验
优点:简单而高效,Serial没有其他线程交互的开销,专心做GC可以获得最高的单线程收集效率。
适用于Client模式下的虚拟机是个很好的选择。
二、ParNew 收集器
ParNew收集器就是Serial收集器的多线程版本,适用于Service模式下的新生代收集器。
ParNew在单核CPU环境中绝对不会有比Serial收集器更好的效果。但是多核CPU,GC效果还是不错的。
三、Parallel Scavenge 收集器
Parallel Scavenge 收集器也是一个新生代收集器,使用复制算法,同时也是一个并行的多线程收集器。
Parallel Scavenge 收集器的目标则是达到一个可控制的吞吐量。
注:吞吐量 =用户运行代码时间 / (运行代码时间 + 垃圾收集时间)
吞吐量高则可以最高效率的利用CPU时间,尽快的完成程序的运算任务,主要适用于后台运算二不需要太多的交互任务。
四、Serial Old 收集器
Serial Old 收集器是Serial收集器的老年代版本,单线程收集器,使用“标记-整理”算法。
五、Parallel Old 收集器
Parallel Old 收集器是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。
六、CMS 收集器
CMS(Concurrent Mark Sweep)收集器是一种以获取最短停顿时间为目标的收集器。目前很大一部分Java应用程序都集中是在互联网或B/S系统的服务器上,这类应用尤其重视服务器的响应速度,希望系统停顿时间最短,给用户最好的体验。整个过程分为四步:
- 初始标记(CMS initial mark):标记一下GC Root能直接关联到的对象,速度很快;
- 并发标记(CMS concurrent mark):进行GC Root Tracing的过程
- 重新标记(CMS remark):修正并发标记期间,因用户程序继续运行导致标记产生变动的那一部分对象的标记记录;
- 并发清除(CMS concurrent sweep)
其中初始标记、重新标记还是需要“Stop The World”.CMS收集器的内存回收过程与用户线程并发执行。
优点是并发收集、低停顿
缺点:1)CMS收集器对CPU资源非常敏感;在并发阶段虽然不会导致用户线程停顿,但是会因为占用了一份线程而导致应用程序变慢,总吞吐量降低。
2)CMS并发清除阶段用户线程还在运行,伴随线程运行产生的新的垃圾出现在标记过程以后,CMS无法在本次收集中处理掉它们,只能留到下次GC。这一部分垃圾就是“浮动垃圾”。
3)CMS是一款“标记-清除”算法实现的收集器,收集过程会产生大量的空间碎片。空间碎片过多,将会给较大对象无法分配内存,从而触发一次 Full GC.
七、G1 收集器
G1(Garbage First)收集器相比于CMS改进有:
(1)G1基于“标记-整理”算法实现收集器,即它不会产生大量的空间碎片,这对于长时间的应用系统非常重要。
(2)可以非常准确的控制停顿,既能让使用者明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不超过N毫秒。G1将Java堆(包括新生代、老年代)划分为多个大小固定独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域。
JVM垃圾收集器介绍的更多相关文章
- 7种JVM垃圾收集器特点,优劣势、及使用场景
今天继续JVM的垃圾回收器详解,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 一.常见的垃圾收集器有3类 1.新生代的收集器包括 Serial PraNew Pa ...
- 5种JVM垃圾收集器特点和8种JVM内存溢出原因
先来看看5种JVM垃圾收集器特点 一.常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Serial ParNew Parallel Scavenge 老年代收集器: Serial O ...
- 7种 JVM 垃圾收集器特点、优劣势及使用场景(多图)
7种 JVM 垃圾收集器特点.优劣势及使用场景(多图) mp.weixin.qq.com 点击上方"IT牧场",选择"设为星标"技术干货每日送达! 一.常见垃 ...
- JVM调优:HotSpot JVM垃圾收集器
HotSpot JVM垃圾收集器 - Snooper - 博客园https://www.cnblogs.com/snooper/p/8718478.html
- JVM垃圾收集器-Parallel Scavenge收集器
今天我给大家讲讲JVM垃圾收集器-Parallel Scavenge收集器 Parallel Scavenge收集器 Parallel Scavenge收集器也是一个新生代收集器,它也是使用复制算法的 ...
- 【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垃圾回收算法& ...
随机推荐
- 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- 【转载】SweetAlert2 使用
SweetAlert2是一款功能强大的纯Js模态消息对话框插件.SweetAlert2用于替代浏览器默认的弹出对话框,它提供各种参数和方法,支持嵌入图片,背景,HTML标签等,并提供5种内置的情景类, ...
- save(),saveorupdate()还有marqe()
所有这三个方法,也就是save().saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别.例如,save()只能INSERT记录,但是saveOrU ...
- luogu1151 亲戚
题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如 ...
- 排序及重复元素去重的说明,TreeSet,HashSet
先看下面一段代码: package 类集; import java.util.Set; import java.util.TreeSet; class Person{ private String n ...
- HTML 学习笔记 JavaScript(简介)
JavaScript 是世界上最流行的编程语言. 这门语言可用于HTML和web 更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. JavaScript是脚本语言 JavaScript ...
- UNR #1 题解
A. 争夺圣杯 还是想说一下,这题是原题啊...想做的人可以戳codechef上的MTMXSUM(懒得贴链接了,套了个壳,不过正常人应该都能看得出来) 显然异或输出没什么奇怪的性质... 考虑一个元素 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(6)--在线调整虚拟机的大小
前面提到过openstack环境部署及创建虚拟机的完整过程,然后有时候会发现创建的虚拟机规格太小,满足不了业务需求:亦或是虚拟机规格太大,容易造成资源浪费.于是就有了在线拉伸虚拟机规格的需求.所以,今 ...
- CSS3中的Rem值与Px之间的换算
bootstrap默认 html{font-size: 10px;} rem是一个相对大小的值,它相对于根元素<html>, 比如假设,我们设置html的字体大小的值为html{font- ...
- Codevs 1051 二叉树最大宽度和高度
1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 给出一个二叉树,输出它的最大宽 ...