Jdk1.8 垃圾收集器分类及垃圾收集器选择思路
根据运行方式Java HotSpot VM 包括三种不同类型的收集器分别是串行收集器、并行收集器和并发收集器,每种收集器具有不同的性能特征。
串行收集器使用单个线程来执行所有垃圾收集工作,这使得它相对高效,因为线程之间没有通信开销。它最适合于单处理器计算机,因为它无法利用多处理器硬件,尽管它在多处理器上对于具有较小数据集(最大约 100 MB)的应用程序非常有用。默认情况下,在某些硬件和操作系统配置上会选择串行收集器,也可以使用选项 显式启用串行收集器。-XX:+UseSerialGC
并行收集器(也称为吞吐量收集器)并行执行次要回收,这可以显著降低垃圾回收开销。它适用于在多处理器或多线程硬件上运行的具有中型到大型数据集的应用程序。默认情况下,在某些硬件和操作系统配置上会选择并行收集器,也可以使用选项 显式启用并行收集器。-XX:+UseParallelGC
•Parallel compaction 是一项功能,它使 parallel collector 能够并行执行主要回收。如果没有并行压缩,则使用单个线程执行主要集合,这可能会严重限制可伸缩性。如果指定了该选项,则默认情况下会启用 Parallel compaction。将其关闭的选项是 。-XX:+UseParallelGC-XX:-UseParallelOldGC
并发收集器,大多数并发收集器并发执行其大部分工作(例如,当应用程序仍在运行时)以保持垃圾回收暂停时间较短。它专为具有大中型数据集的应用程序而设计,在这些数据集中,响应时间比整体吞吐量更重要,因为用于最大限度地减少暂停的技术会降低应用程序性能。Java HotSpot VM 提供了两个主要并发收集器并发标记清除(CMS)收集器和垃圾优先垃圾回收器提供选择;使用选项启用 CMS 收集器或启用 G1 收集器。-XX:+UseConcMarkSweepGC -XX:+UseG1GC、 -XX:+CMSIncrementalMode
垃圾收集器选择思路
除非应用程序具有相当严格的暂停时间要求,否则请首先运行应用程序并允许 VM 选择收集器。如有必要,请调整堆大小以提高性能。如果性能仍未达到目标,请使用以下准则作为选择垃圾收集器的起点。
如果应用程序具有较小的数据集(最大约 100 MB),则选择带有选项 的 serial collector 。-XX:+UseSerialGC
如果应用程序将在单个处理器上运行,并且没有暂停时间要求,则让 VM 选择收集器,或使用选项 .-XX:+UseSerialGC
如果应用程序性能峰值是第一要务,并且没有暂停时间要求或 1 秒或更长时间的暂停是可接受的,则让 VM 选择收集器,或使用 选择并行收集器。-XX:+UseParallelGC
如果响应时间比总体吞吐量更重要,并且垃圾回收暂停时间必须短于大约 1 秒,则使用或选择并发回收器。-XX:+UseConcMarkSweepGC -XX:+UseG1GC
这些准则仅提供了选择收集器的起点,因为性能取决于堆的大小、应用程序维护的实时数据量以及可用处理器的数量和速度。暂停时间对这些因素特别敏感,因此前面提到的1秒阈值只是近似值:在许多数据大小和硬件组合上,并行收集器的暂停时间将超过 1 秒;相反,对于某些组合,并发收集器可能无法将暂停时间缩短到1秒。
如果建议的收集器未达到所需的性能,请首先尝试调整堆大小和生成大小以满足所需的目标。如果性能仍然不足,请尝试使用其他收集器:使用并发收集器来减少暂停时间,并使用并行收集器来提高多处理器硬件上的整体吞吐量。
以上来自于对 Java 平台、标准版 HotSpot 虚拟机垃圾回收调优指南第五章翻译摘抄
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类