JVM GC调优关键点

1. 掌握不同的GC算法之间区别与各自适用场景

  1. Serial: 单线程, 无论Young GC 还是 Full GC 均会造成卡顿(stop-the-world),适用于CPU资源严重受限的情况
  2. Throughput: 又称Parallel GC, 是Serial的多线程并行版,在stop-the-world期间使用多个线程执行GC.
  3. CMS: Concurrent GC(并发型GC) 即在对Old Gen/PermGen 进行GC时,不会暂停应用线程(应用线程与GC线程同时运行,即一边扔垃圾一边收拾房间),然而Young GC时仍然会暂停应用线程。与Parallel相比优点是吞吐量更大,然而Old Gen GC时会消耗更多CPU资源。与G1相比,适用于堆相对较小的场景。
  4. G1: 与CMS同为Concurrent GC, 以metaspace的概念取代PermGen, GC时采用的Region(分区)的方式,与CMS相比适用于堆较大的情况(4G以上)。

2. 获悉JVM实时状态及GC操作日志

  1. jstat, jconsole等JDK自带工具
  2. Java Flight Record 等商用工具
  3. 工具的可选项

3. JVM调优的核心目标

更高的吞吐量,即应用线程运行时间占总运行时间的百分比最高:

吞吐量 = 应用线程运行时间 / (应用线程运行时间 + GC线程运行时间)

4. JVM调优时需要考虑的点

  1. Heap size的平衡
    • Heap size较小,优点:Full GC的平均时长较短;缺点:Young GC会非常频繁;
    • Heap size较大,优点:GC的频率减少;缺点:延长Full GC执行的时间;
    • Heap size的自适应调整机制
  2. GC线程的数量
    • 配置线程数量的参考公式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile阅读 5,402评论 1 56
  • 参数设置 在Java虚拟机的参数中,有3种表示方法用“ps -ef |grep "java"命令,可以得到当前Ja...
    九问阅读 9,190评论 2 52
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 6,025评论 2 31
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,731评论 3 83
  • 1.一些概念 1.1.数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始...
    落落落落大大方方阅读 4,576评论 4 86