HotSpot虚拟机垃圾收集优化教程-可供选择的垃圾收集器

可供选择的垃圾收集器

关于这一点的讨论是关于串行垃圾收集器的。Java HotSpot虚拟机包含三种不同类型的垃圾收集器,每个收集器具有不同的性能特征。

  • 串行垃圾收集器
  • 并行垃圾收集器
  • 大多数并发垃圾收集器
  • 选择一个垃圾收集器

串行垃圾收集器

串行垃圾收集器使用单个线程来执行所有垃圾收集器工作,这使得他相对高效,因为没有线程之间通信的开销。

串行垃圾收集器最适合单处理器机器,因为串行垃圾收集器不能发挥多处理器硬件的优势,尽管串行垃圾收集器可以在多处理器上应用于小数据集(高达100M)的应用。串行垃圾收集器在某些硬件和操作系统配置上默认被选中,或者可以通过选项-XX:+UseSerialGC。

并行垃圾收集器

并行垃圾收集器也称为吞吐量收集器,他是与串行垃圾收集器类似的分代收集器。串行垃圾收集器和并行垃圾收集器之间的主要区别在于并行收集器有多个用于加快垃圾收集速度的线程。

并行垃圾收集器适用于具有运行在多处理器或多线程硬件上的中型到大型数据集的应用程序。可以使用-XX:+UseParallelGC选项。

Parallel compaction是使并行垃圾收集器能够并行执行major垃圾收集功能。如果没有Parallel compaction技术,则major垃圾收集将使用单线程,这将会显著的限制可伸缩性。如果指定-XX:+UseParallelGC选项,则默认情况下启用Parallel compaction。可以使用-XX:-UseParallelOldGC选项来禁用他。

大多数并发垃圾收集器

并发标记扫描垃圾收集器(CMS)和垃圾收集优先垃圾收集器(G1)是两个主要的并发垃圾收集器。大多数并发垃圾收集器并发对应用程序执行一些昂贵的工作。

  • G1垃圾收集器:此服务器类型的垃圾收集器用于具有大量内存的多处理器计算机。他高概率满足垃圾收集暂停时间目标同时实现高吞吐量。G1在某些硬件和操作系统上是默认的选项。或者可以使用-XX:+UseG1GC显式启用。
  • CMS垃圾收集器:该垃圾收集器适用于更偏爱较短垃圾收集暂停时间和能够承受与垃圾收集共享处理器资源???的应用程序。使用选项-XX:+UseConcMarkSweepGC启用CMS收集器

CMS垃圾收集器JDK9开始被废弃

ZGC Z垃圾收集器

Z垃圾收集器(ZGC)是一个可伸缩的低延迟垃圾收集器。ZGC并发执行所有昂贵的工作,而不停止应用程序线程的执行。

ZGC适用于需要低延迟(10ms)和非常大堆的应用程序(TB)。可以使用-XX:+UseZGC选项启用。

ZGC作为一个实验性的特性提供,自JDK 11开始。

选择一个垃圾收集器

除非应用程序有相当严格的暂停时间要求,否则首先运行应用程序并且允许虚拟机去选择垃圾收集器。

如果必要,请调整堆的大小以提高性能。如果性能仍然无法达到目标,使用以下准则作为选择垃圾收集器的出发点:

  • 如果应用程序有一个小的内存空间(最高达100MB),则使用选项-XX:+UseSerialGC选择串行垃圾收集器
  • 如果应用程序运行在一个单核处理器上,并且没有暂停时间需求,则使用-XX:+UseSerialGC
  • ???如果峰值应用程序性能是第一优先级,并且没有暂停时间要求,或者可以接受一秒甚至更长时间暂停,让虚拟机选择垃圾收集器或者使用选项-XX:+UseParallelGC。
  • 如果响应时间比整体吞吐量更重要,垃圾收集停顿必须保持小于一秒钟,然后选择一个主要的并发垃圾收集器使用选项-XX:+UseG1GC或者-XX:+UseConcMarkSweepGC。
  • 如果响应时间是一个高优先级,并且可以使用一个非常大的堆,那么使用-XX:UseZGC??选择一个完全并发的收集器

这些准则仅提供了选择垃圾收集器的基准,因为性能还取决于堆的大小,应用程序维护的活跃数据和提供的处理的数量和速度。

如果建议的垃圾收集器没有达到所需的性能,则首先调整堆和分代堆的大小以满足性能要求。如果性能仍然不能满足,请尝试其他的垃圾收集器;使用并发垃圾收集器去减少暂停时间,使用并行收集器去提升多处理器硬件上的总吞吐量。

  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

return top