垃圾回收器详解

简介: 垃圾回收器详解

两个收集器间有连线,表明它们可以搭配使用:

Serial / Serial Old
Serial / CMS
ParNew / Serial Old
ParNew / CMS
Parallel Scavenge / Serial Old
Parallel Scavenge / Parallel Old
G1
5.2 垃圾回收器详解
垃圾回收器 工作区域 回收算法 工作线程 用户线程并行 描述
Serial 新生带 复制算法 单线程 否 Client模式下默认新生代收集器。简单高效
ParNew 新生带 复制算法 多线程 否 Serial的多线程版本,Server模式下首选, 可搭配CMS的新生代收集器
Parallel Scavenge 新生带 复制算法 多线程 否 目标是达到可控制的吞吐量
Serial Old 老年带 标记-整理 单线程 否 Serial老年代版本,给Client模式下的虚拟机使用
Parallel Old 老年带 标记-整理 多线程 否 Parallel Scavenge老年代版本,吞吐量优先
CMS 老年带 标记-清楚 多线程 是 追求最短回收停顿时间
G1 新生带 + 老年带 标记-整理 + 复制算法 多线程 是 JDK1.9默认垃圾收集器
5.2.1 Serial
Serial 收集器:新生代。发展历史最悠久的收集器。它是一个单线程收集器,它只会使用一个 CPU 或者线程去完成垃圾收集工作,而且在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。
特点:

新生代收集器,使用复制算法收集新生代垃圾。
单线程的收集器,GC工作时,其它所有线程都将停止工作。
简单高效,适合单 CPU 环境。单线程没有线程交互的开销,因此拥有最高的单线程收集效率。
使用方式:

//如何设置JVM参数底下会讲解:这里只是列举一部分参数:

设置垃圾收集器:"-XX:+UseSerialGC" --添加该参数来显式的使用改垃圾收集器;

5.2.2 ParNew
ParNew 收集器:新生代。Serial 的多线程版本,即同时启动多个线程去进行垃圾收集。
特点:

新生代收集器。ParNew垃圾收集器是Serial收集器的多线程版本,采用复制算法。
除了多线程外,其余的行为、特点和Serial收集器一样。
只有它能与 CMS 收集器配合使用。
但在单个CPU环境中,不比Serail收集器好,多线程使用它比较好。
使用方式:

//如何设置JVM参数底下会讲解:这里只是列举一部分参数:

设置垃圾收集器:"-XX:+UseParNewGC" --强制指定使用ParNew;
设置垃圾收集器: "-XX:+UseConcMarkSweepGC" --指定使用CMS后,会默认使用ParNew作为新生代收集器;
设置垃圾收集器参数:"-XX:ParallelGCThreads" --指定垃圾收集的线程数量,ParNew默认开启的收集线程与CPU的数量相同;

5.2.3 Parallel Scavenge
Parallel Scavenge 收集器:新生代。和 ParNew 的关注点不一样,该收集器更关注吞吐量,尽快地完成计算任务。
特点:

新生代收集器。
采用复制算法。
多线程收集。
与ParNew 不同的是:高吞吐量为目标,(减少垃圾收集时间,让用户代码获得更长的运行时间)
使用方式:

//如何设置JVM参数底下会讲解:这里只是列举一部分参数:

设置垃圾收集器:"-XX:+UseParallelGC" --添加该参数来显式的使用改垃圾收集器;
设置垃圾收集器参数:"-XX:MaxGCPauseMillis" --控制垃圾回收时最大的停顿时间(单位ms)
设置垃圾收集器参数:"-XX:GCTimeRatio" --控制程序运行的吞吐量大小吞吐量大小=代码执行时间/(代码执行时间+gc回收的时间)
设置垃圾收集器参数:"-XX:UseAdaptiveSizePolicy" --内存调优交给虚拟机管理
5.2.4 Serial Old
Serial Old 收集器:Serial 的老年代版本,使用标记 - 整理算法。
特点:

老年代收集器, 采用"标记-整理"算法。
单线程收集。
使用方式:

//如何设置JVM参数底下会讲解:这里只是列举一部分参数:

在JDK1.5及之前,与Parallel Scavenge收集器搭配使用,
在JDK1.6后有Parallel Old收集器可搭配。
现在的作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用

相关文章
|
人工智能 弹性计算 自动驾驶
2023 AI开发者生态报告:技术生态、开发范式与应用案例全景
随着人工智能技术的飞速发展,全球IT市场对AI的投入持续增长,预计到2027年将达到4236亿美元。
|
数据采集 算法 BI
解析numpy中的iscomplex方法及实际应用
在 NumPy 中,iscomplex 函数用于检查数组中的每个元素是否为复数。这个函数在处理包含复数数据的数组时非常有用,尤其是在科学计算和工程领域,这些领域经常需要区分实数和复数。 在数学和工程领域,复数是一种基本的数值类型,它们扩展了实数系统,包含了实部和虚部。在 NumPy 中,复数由 numpy.complex128 或 numpy.complex64 类型表示。numpy.iscomplex 函数提供了一种简便的方式来检查数组中的元素是否为复数。这对于数据类型判断、数据清洗和后续的数值分析非常重要。
|
存储 Java
Java-数据结构(一)-java1中有哪些数据结构呢?
Java-数据结构(一)-java1中有哪些数据结构呢?
119 1
|
C# 数据库管理
不同程序集,名称空间类名和方法签名都一样的方法,如何调用
有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。
211 0
不同程序集,名称空间类名和方法签名都一样的方法,如何调用
|
Windows
效率系列(二) Win10常用快捷键
效率系列(二) Win10常用快捷键
573 0
|
存储 SQL 缓存
【数据库设计与实现】第三章:数据后像与前滚
数据后像与前滚设计原则事务的持久性要求事务提交时本次事务的修改必须完成持久化工作,而事务修改的block或page在大部分场景下并不是连续的,在持久化设备上表现为大量的随机IO。通过记录后像,可以将随机IO转换为对持久化设备更为有利的顺序IO,并将dirty block或dirty page(指被修改过但尚未完成持久化的block或page)的多次修改合并,节约block或page的持久化次数。后
【数据库设计与实现】第三章:数据后像与前滚
|
存储 NoSQL Unix
MongoDB:18-MongoDB-ObjectId
MongoDB:18-MongoDB-ObjectId
|
弹性计算 负载均衡
【产品功能】ESS控制台发布新功能:伸缩实例支持standby的操作
原弹性伸缩ESS服务限定,由伸缩组弹出的ECS机器的生命周期完全由伸缩组管理,而伸缩组会时刻对机器做健康检查,如果检测到伸缩组下的机器为不健康状态,便会释放该机器。所以弹性伸缩ESS新支持了standby状态,处于此状态的机器不会进行健康检查以及释放操作。
6820 0
|
Web App开发 Windows
Windows 7 IE主页被篡改,如何修复?
有时我们的电脑会因为病毒的入侵,使得IE主页被篡改,然后就会被没底线的广告包围,有时用杀毒软件也不修复,那么此时应该怎么修复呢?其实很简单,只需几步,就可以让您的电脑重新清净下来。   第一步   点击“开始”按钮,在搜索框内输入“msconfig”,点击回车键,将会打开“系统配置”窗口。
1294 0