JVM面试问题系列:JVM 配置经常使用参数和经常使用 GC 调优策略

JVM 配置经常使用参数

堆参数算法

回收器参数性能优化

如上表所示,目前主要有串行、并行和并发三种,对于大内存的应用而言,串行的性能过低,所以使用到的主要是并行和并发两种。并行和并发 GC 的策略经过 UseParallelGC 和 UseConcMarkSweepGC 来指定,还有一些细节的配置参数用来配置策略的执行方式。例如:XX:ParallelGCThreads, XX:CMSInitiatingOccupancyFraction 等。 一般:Young 区对象回收只可选择并行(耗时间),Old 区选择并发(耗 CPU)。服务器

项目中经常使用配置markdown

经常使用组合并发

经常使用 GC 调优策略

GC 调优原则post

在调优以前,咱们须要记住下面的原则:性能

多数的 Java 应用不须要在服务器上进行 GC 优化;优化

多数致使 GC 问题的 Java 应用,都不是由于咱们参数设置错误,而是代码问题;spa

在应用上线以前,先考虑将机器的 JVM 参数设置到最优(最适合);3d

减小建立对象的数量;

减小使用全局变量和大对象;

GC 优化是到最后不得已才采用的手段;

在实际使用中,分析 GC 状况优化代码比优化 GC 参数要多得多。

GC 调优目的

将转移到老年代的对象数量下降到最小;

减小 GC 的执行时间。

策略 1:将新对象预留在新生代,因为 Full GC 的成本远高于 Minor GC,所以尽量将对象分配在新生代是明智的作法,实际项目中根据 GC 日志分析新生代空间大小分配是否合理,适当经过“-Xmn”命令调节新生代大小,最大限度下降新对象直接进入老年代的状况。

策略 2:大对象进入老年代,虽然大部分状况下,将对象分配在新生代是合理的。可是对于大对象这种作法却值得商榷,大对象若是首次在新生代分配可能会出现空间不足致使不少年龄不够的小对象被分配的老年代,破坏新生代的对象结构,可能会出现频繁的 full gc。所以,对于大对象,能够设置直接进入老年代(固然短命的大对象对于垃圾回收老说简直就是噩梦)。-XX:PretenureSizeThreshold 能够设置直接进入老年代的对象大小。

策略 3:合理设置进入老年代对象的年龄,-XX:MaxTenuringThreshold 设置对象进入老年代的年龄大小,减小老年代的内存占用,下降 full gc 发生的频率。

策略 4:设置稳定的堆大小,堆大小设置有两个参数:-Xms 初始化堆大小,-Xmx 最大堆大小。

策略5:注意: 若是知足下面的指标,则通常不须要进行 GC 优化:

MinorGC 执行时间不到50ms;

Minor GC 执行不频繁,约10秒一次;

Full GC 执行时间不到1s;

Full GC 执行频率不算频繁,不低于10分钟1次。

JVM系列:

深刻详解JVM 内存区域及内存溢出分析

JVM的判断对象是否已死和四种垃圾回收算法

JVM 配置经常使用参数和经常使用 GC 调优策略

7种JVM垃圾收集器特色,优劣势、及使用场景!

最后

后续会持续更新性能优化专题知识,写的很差的地方也但愿大牛能指点一下,你们以为不错能够点个赞在关注下,之后还会分享更多文章!