jvm常用垃圾回收器,jvm常用的垃圾收集算法
00-1010前言垃圾收集器类型1串行收集器1.1定义1.2优点1.3使用的垃圾收集算法1.4应用场景1.5工作流2。串行旧收集器2.1定义2.2优点2.3使用的垃圾收集算法2.4应用场景2.5工作流3。ParNew collector 3.1定义3.2优点3.3使用的垃圾收集算法3.4应用场景3.5工作流4.1定义4.2特性4.3使用的垃圾收集算法4.4应用场景4.5工作流5.1定义5.2特性5.3使用的垃圾收集算法5.4应用场景5.5工作流程6。CMS收集器6.1定义6.2特性6.2.1优点6.2.2缺点6.3使用的垃圾收集算法6.4应用场景6.5工作流7。G1收集器7.1定义7.2功能7.3使用的垃圾收集算法7.4应用场景7.5工作流8。摘要
00-1010垃圾收集器是垃圾收集算法的具体实现。
本文将阐述市面上常见的垃圾收集器类型,希望你会喜欢。
00-1010垃圾收集器是垃圾收集算法的具体实现。
现在主流的垃圾收集器有七种:
我们会根据不同的需求场景,选择不同特点的垃圾收集器。
下面我就详细介绍一下。
目录
00-1010开发历史最长的最基础的垃圾收集器
00-1010并发收集在垃圾收集期间,所有其他工作线程(Stop The World)必须暂停,直到收集结束。挂起工作线程是在用户不可见时完成的。
注意:并发和并行的区别。A .并发:在一定时间内交替执行多个任务(即先处理A再处理B,循环处理)。B .并行性:在某个时刻同时执行多个任务(即同时处理A和B)。
单线程只用一个线程完成垃圾收集(GC线程),效率高。对于有限的单CPU环境,串行收集器没有线程交互开销(专用于垃圾收集),具有更高的单线程收集效率。垃圾收集效率高,就是其他工作人员的暂停时间短(可以控制在100ms以内)。只要垃圾收集的频率不高,完全可以接受。
00-1010复制算法
00-1010客户端模式,虚拟机的新一代领域
前言
垃圾收集器类型
1. Serial收集器
系列采集器用于老年区的版本
00-1010并发,单线程,高效率
和串口采集器一样,这里就不描述了。
00-1010标记-排序算法
00-1010在客户端模式下,虚拟机的旧区域处于服务器模式:与并行清除收集器一起使用。
作为CMS collector的备份计划,在并发收集失败时使用。
1.1 定义
1.2 优点
00-1010串行收集器的多线程版本。
00-1010并发收集在垃圾收集期间,所有其他工作线程(Stop The World)必须暂停,直到收集结束。挂起工作线程是在用户不可见时完成的。
由于线程的存在,多线程收集使用多个垃圾收集线程(GC线程)来完成垃圾收集
交互的开销,所以在单CPU
环境下,性能差于 Serial
收集器
与CMS
收集器配合工作 目前,只有ParNew
收集器能与 CMS
收集器 配合工作由于CMS
收集器使用广泛,所以该特点非常重要。关于CMS
收集器 下面会详细说明
3.3 使用的垃圾收集算法
复制 算法
3.4 应用场景
服务器模式下,虚拟机的 新生代区域
多线程收集
3.5 工作流程
4. Parallel Scavenge收集器
4.1 定义
ParNew
收集器的升级版
4.2 特点
具备ParNew 收集器并发、多线程收集的特点以达到 可控制吞吐量 为目标 其他收集器的目标是: 尽可能缩短 垃圾收集时间,而Parallel Scavenge
收集器的目标则是:达到 可控制吞吐量吞吐量:CPU
用于运行用户代码的时间 与 CPU
总消耗时间(运行用户代码时间+垃圾收集时间)的比值如:虚拟机总共运行100分钟,其中垃圾收集时间=1分钟、运行用户代码时间 = 99分钟,那吞吐量 = 99 / 100 = 99%自适应 该垃圾收集器能根据当前系统运行情况,动态调整自身参数,从而达到最大吞吐量的目标。该特性称为:GC
自适应的调节策略
这是Parallel Scavenge
收集器与 ParNew
收集器 最大的区别
4.3 使用的垃圾收集算法
复制 算法
4.4 应用场景
服务器模式下,虚拟机的 新生代区域
4.5 工作流程
5. Parallel Old收集器
5.1 定义
Parallel Scavenge
收集器 应用在老年代区域 的版本
5.2 特点
以达到 可控制吞吐量 为目标、自适应调节、多线程收集
同Parallel Scavenge
收集器
5.3 使用的垃圾收集算法
标记-整理 算法
5.4 应用场景
服务器模式下,虚拟机的 老年代区域
5.5 工作流程
6. CMS收集器
6.1 定义
即Concurrent Mark Sweep
,基于 标记-清除算法的收集器
6.2 特点
6.2.1 优点
并行 用户线程 & 垃圾收集线程同时进行。
即在进行垃圾收集时,用户还能工作。
单线程收集 只使用 一条线程 完成垃圾收集(GC线程)垃圾收集停顿时间短 该收集器的目标是: 获取最短回收停顿时间 ,即希望 系统停顿的时间 最短,提高响应速度
6.2.2 缺点
总吞吐量会降低 因为该收集器对CPU
资源非常敏感,在并发阶段,虽不会导致用户线程停顿,但会因为占用部分线程(CPU
资源)而导致应用程序变慢,总吞吐量会降低无法处理浮动垃圾 由于 并发清理时 用户线程还在运行,所以会有新的垃圾不断产生(即浮动垃圾),只能等到留待下一次GC时再清理掉。因为这一部分垃圾出现在标记过程之后,所以CMS
无法在当次GC
中处理掉它们
因此,CMS
无法等到老年代被填满再进行Full GC,CMS需要预留一部分空间。即所谓的:可能出现Concurrent Mode Failure
失败而导致另一次Full GC
产生。
垃圾收集后会产生大量内存空间碎片 因为 CMS
收集器是基于标记-清除算法的。
6.3 使用的垃圾收集算法
标记-清除 算法
6.4 应用场景
重视应用的响应速度、希望系统停顿时间最短的场景
如互联网移动端应用
6.5 工作流程
CMS
收集器 是基于 标记-清除算法实现的收集器,工作流程较为复杂:(分为四个步骤)
初始标记
并发标记重新标记并发清除
下面用一张图详细说明工作流程:
由于整个过程中,耗时最长的并发标记 和 并发清除过程都可与用户线程一起进行所以,CMS
收集器的垃圾收集过程可看作是与用户线程 并发执行的。
7. G1 收集器
7.1 定义
最新、技术最前沿的垃圾收集器
7.2 特点
并行 用户线程 & 垃圾收集线程同时进行。
即在进行垃圾收集时,用户还能工作
多线程 即使用 多条垃圾收集线程(GC
线程) 进行垃圾收集
并发 & 并行 充分利用多CPU
、多核环境下的硬件优势 来缩短 垃圾收集的停顿时间
垃圾回收效率高 G1
收集器是 针对性 对 Java
堆内存区域进行垃圾收集,而非每次都对整个 Java
堆内存区域进行垃圾收集。
即 G1
收集器除了将 Java
堆内存区域分为新生代 & 老年代之外,还会细分为许多个大小相等的独立区域( Region
),然后G1收集器会跟踪每个 Region
里的垃圾价值大小,并在后台维护一个列表;每次回收时,会根据允许的垃圾收集时间 优先回收价值最大的Region
,从而避免了对整个Java堆内存区域进行垃圾收集,从而提高效率。
因为上述机制,G1
收集器还能建立可预测的停顿时间模型:即让 使用者 明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得从超出N毫秒。即具备实时性
分代收集 同时应用在 内存区域的新生代 & 老年代
不会产生内存空间碎片
从整体上看,G1
收集器是基于 标记-整理算法实现的收集器
从局部上看,是基于 复制算法 实现 上述两种算法意味着 G1
收集器不会产生内存空间碎片。
7.3 使用的垃圾收集算法
对于新生代:复制算法
对于老年代:标记 - 整理算法
7.4 应用场景
服务器端虚拟机的内存区域(包括 新生代 & 老年代)
7.5 工作流程
G1
收集器的工作流程分为4个步骤:
初始标记
并发标记最终标记筛选回收
下面用一张图详细说明工作流程
8. 总结
本文对垃圾收集器的类型进行全面讲解
以上就是JVM常见垃圾收集器学习指南的详细内容,更多关于JVM垃圾收集器的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。