此节主要与 串行GC 相关。
3类 GC
Hotspot 有 3种 不同类型的 GC,每个 GC 都有不同的性能特征。
串行GC
串行GC 使用单线程执行所有垃圾回收工作。因为没有线程间通信开销,所以相对而言比较高效。
尽管它在多处理器机器上,对小数据集(上限100MB左右)的应用程序很有效,但它最适合单处理器的机器。因为它不能利用多处理器硬件的优势。
在某些硬件和操作系统上,串行GC 是默认选项。也可以通过 -XX:+UseSerialGC 显式启用。
并行GC(吞吐量GC)
并行GC 也称为 吞吐量GC。它以并行的方式执行 Minor GC,可以显著减少垃圾收集的开销。
它适用于 运行在多处理器或多线程硬件上的 中大型数据集 应用程序。
在某些硬件和操作系统上,并行GC 是默认选项。也可以通过 -XX:+UseParallelGC 显式启用。
并行压缩(compact)
“并行压缩” 这项特性使得 并行GC 能并行执行 Major GC。
如果没有“并行压缩”,那么将使用单线程执行 Major GC,这会显著限制可伸缩性。
如果指定了 -XX:+UseParallelGC,那么默认会启用“并行压缩”。可以通过 -XX:-UseParallelOldGC 关闭“并行压缩”特性。
并发GC(Mostly Concurrent GC)
并发GC(Mostly Concurrent Collector) 会并发执行大部分工作。
如,当应用程序仍在运行的时候,执行GC(与应用程序的“业务处理”是并发关系)。这样可以缩短 GC 的暂停时间。
它是为 中大型数据集 且 响应时间比总吞吐量更重要 的应用程序设计的。因为用于最小化暂停时间的技术 会降低应用程序的性能。
HotSpot 提供了 2个 并发GC (《并发GC》)。可通过 -XX:+UseConcMarkSweepGC 启用 CMS,或 -XX:+UseG1GC 启用 G1 。
选择 GC
除非相当严格的暂停时间要求,否则 先运行应用程序 且允许 JVM 自行选择 GC。
如有必要,可以调整堆大小 以提高性能。
如果性能仍然无法满足目标,则使用以下准则作为选择 GC 的起点。
- 如果应用程序的数据集较小(上限 100MB 左右),那么使用 串行GC(-XX:+UseSerialGC)。
- 如果应用程序运行在单处理器上,且没有暂停时间的要求,那么可以让 JVM 自行选择GC,或指定 串行GC(-XX:+UseSerialGC)
- 如果 应用程序的峰值性能 是第一优先级,且没有暂停时间的要求,或者可以接受1秒或更长时间的暂停,那么可以让 JVM 自行选择GC,或指定 并行GC (-XX:+UseParallelGC)。
- 如果响应时间比总吞吐量更重要,且GC导致的暂停时间必须小于 1 秒,那么可以指定一个 并发GC(-XX:+UseConcMarkSweepGC 或 -XX:+UseG1GC)。
这些准则仅提供了选择GC的起点。因为性能取决于 堆的容量、存活数据量、处理器的数量和速度。暂停时间 对这些因素特别敏感,所以前面提到的 1秒 阈值只是近似值。在许多不同数据集与硬件的组合中,并行GC 的暂停时间会超过 1秒。相反,并发GC 只在部分组合中会暂停超过1秒。
如果上述建议的GC未达到性能要求,可先尝试调整堆大小。 如果性能仍然不足,再尝试其他GC:
- 用 并发GC 减少暂停时间;
- 用 并行GC 提高总吞吐量(多处理器硬件上)
相关推荐
JVM与GC调优课程视频 〖课程介绍〗: JVM与GC调优课程视频 〖课程目录〗: 1.笔记/ ├── 第1篇-字节码篇.png?x-oss-process=style/pnp8 ├── 第2篇-类的加载篇.png?x-oss-process=style/pnp8 ├── 第3篇-运行时...
Java GC与性能调优 Java GC与性能调优是 Java programming language 中非常重要的一部分,直接影响着 Java application 的性能。本文档将对 Java GC 与性能调优进行详细的介绍。 一、 Java 平台的逻辑结构 Java ...
### Java GC垃圾回收调优指南 #### 概述 在Java开发过程中,垃圾回收(Garbage Collection, GC)是管理内存资源的关键技术之一。...通过上述指南,希望能帮助开发者更好地掌握GC调优技巧,提高应用程序的整体性能。
### JVM_GC调优详解 #### 一、JVM体系结构概览 Java虚拟机(JVM)作为Java程序的运行环境,其内部结构复杂且高效。为了更好地理解JVM_GC调优,我们首先来了解一下JVM的基本组成部分。 1. **类装载器子系统(Class ...
通过深入学习JVM体系结构和GC调优,开发者可以更好地理解和控制Java应用的内存使用,减少垃圾收集的开销,提升系统性能。这份PPT将帮助我们系统地掌握这些关键点,使我们能够应对实际开发中的各种挑战。
GC调优是优化Java应用程序性能的关键环节,尤其是在大型系统中,正确配置和调整GC参数可以显著减少程序暂停时间,提高整体运行效率。 在Java中,堆内存是GC的主要工作区域,它分为新生代、老年代和永久代(Java 8...
Java服务GC参数调优案例1 Java服务GC参数调优案例的标题“Java服务GC参数调优案例1”和描述“背景以及遇到的问题我们的Java HTTP服务属于OLTP类型,对成功率和响应时间的要求比较高,在生产环境中出现偶现的成功率...
在课程内容上几乎不用过多的介绍,单是查阅目录就会发现非常的强悍,课程从思路和实际案例的角度出发,非常全面的像同学们诠释了JVM与GC调优的思路和策略,对实际企业级应用是有巨大的提升价值。 〖课程目录〗: (1)\...
然而,GC调优是每个Java开发者都需要面对的挑战,因为合适的GC配置可以显著提高应用的性能和稳定性。以下是对“java gc调优”这一主题的深入探讨。 首先,理解JVM内存结构是GC调优的基础。JVM内存主要分为堆内存...
jvm体系结构与GC调优,图文齐飞,方便理解,,非常适合入门的java工程师以及性能测试工程师阅读,欢迎大家下载
《JVM和GC详解及调优》是一本深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的专业...对于团队负责人或系统架构师而言,理解JVM和GC调优也是必不可少的技能,有助于提升整个系统的稳定性和效率。
《阿里巴巴Java性能调优实战》(2021华山版)则聚焦于Java应用的性能优化技巧,内容包括JVM内存调优、GC算法选择、线程池配置、数据库优化、网络I/O优化等关键领域。这本书通过实际案例分析,指导开发者如何定位并解决...
Java内存参数调优是优化Java应用程序性能的关键环节,特别是对于大型和高负载的应用,合理的内存配置可以有效地降低垃圾收集(Garbage Collection, GC)带来的压力,提高应用的响应速度和系统吞吐量。以下是一些关于...
它能打印出Java线程的堆栈跟踪,帮助开发者发现哪些线程被阻塞、等待或者处于运行状态。例如,`jstack pid`命令用于查看进程id为pid的Java线程的堆栈信息。 4. jmap命令用于观察运行中的JVM物理内存的占用情况。它...
JVM体系结构与GC调优
它试图在实现高吞吐量的同时,高概率地满足 GC暂停时间 目标。整个堆操作,如 全局标记,与业务线程同时运行。这可以防止 中断的发生概率 与 堆或存活数据大小 成比例。 G1 通过几种技术实现了 高性能 和 暂停时间 ...