此节主要与 串行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与性能调优文档 作者:高飞
JVM体系结构与GC调优,PPT,格式排版完美,图文并茂,一共46页
让你对java gc 的工作原理有更深的了解 谢谢下载
jvm体系结构与GC调优,图文齐飞,方便理解,,非常适合入门的java工程师以及性能测试工程师阅读,欢迎大家下载
JVM体系结构与GC调优
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...
它试图在实现高吞吐量的同时,高概率地满足 GC暂停时间 目标。整个堆操作,如 全局标记,与业务线程同时运行。这可以防止 中断的发生概率 与 堆或存活数据大小 成比例。 G1 通过几种技术实现了 高性能 和 暂停时间 ...
在课程内容上几乎不用过多的介绍,单是查阅目录就会发现非常的强悍,课程从思路和实际案例的角度出发,非常全面的像同学们诠释了JVM与GC调优的思路和策略,对实际企业级应用是有巨大的提升价值。 〖课程目录〗: (1)\...
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
用于测试jvm gc调优-share-jvm-gc
jvm-full-gc调优-jvm-full-gc
JVM体系结构与GC调优,内容涉及JVM的垃圾回收的各种策略和JVM的各种内存的结构的分配
在经过了几次跳票之后,Java9终于在原计划日期的...本文将主要讲解GC调优需要知道的一些基础知识,会涉及到一些GC的实现细节,但不会对实现细节做很全面的阐述,如果你看完本文之后,能对GC有一个大致的认识,那本文
java进阶必备书籍,高清版。带目录结构。方便阅读,书中内容讲的透彻
可见,无论使用多少堆外内存,对JVM内存的使用终究是绕不过去,既然绕不过去...本文就将会介绍HBase应用场景下CMS GC策略的调优技巧,后续还会针对另一业界开始使用的GC策略-G1GC策略在HBase应用场景下进行调优介绍。