什么是JVM调优?

JVM调优指根据应用场景配置JVM参数,让Java程序运行在最佳状态。主要包括:

  1. 堆大小调优:设置合适的堆空间初始大小(-Xms)和最大大小(-Xmx),避免内存溢出或过度分配内存。
  2. 垃圾回收调优:选择高效的垃圾回收器组合,设置回收频率、回收时间比例等,平衡停顿时间和吞吐量。
  3. 方法区大小调优:设置大的方法区容量(-XX:MaxPermSize),避免方法区溢出。
  4. 线程调优:设置线程栈空间大小(-Xss),更高的线程并发数(-XX:ThreadStackSize)等,使应用可以承载更高的并发。
  5. JIT编译器调优: 设置JIT编译方法的大小限制(-XX:CompileThreshold)、JIT编译时间比较限制(-XX:OnStackReplacePercentage)等,加快热点方法的编译速度。

例如,对一个典型的Java EE应用,可以进行如下调优:
-Xms2048m -Xmx4096m :设置初始堆大小2G,最大堆大小4G
-XX:NewRatio=2 :新生代占整个堆的2/3
-XX:SurvivorRatio=8 :Eden区与Survivor区的比例为8:1
-XX:PermSize=512m -XX:MaxPermSize=1024m :方法区初始值512M,最大值为1024M
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC :新生代使用ParNew,老生代使用CMS
-XX:CMSInitiatingOccupancyFraction=70 :CMS的回收阈值设置为70%
-XX:+UseAdaptiveSizePolicy :启用自适应调整策略
-XX:ThreadStackSize=512 :设置每个线程的堆栈大小为512K
-XX:CompileThreshold=500 :热点方法调用500次开始编译
-XX:OnStackReplacePercentage=10 : spends 10% of the time doing on stack replacement
可以看到,这些调优参数综合考虑了堆空间、垃圾回收、方法区、线程 stack 以及JIT编译等方面,从整体上保证最佳运行状态。