文章目录
- JVM 调优的参数类型
- 一、标配参数
- 二、X参数
- 三、XX参数
- JVM 调优的常用参数
JVM 调优的参数类型
一、标配参数
这类此参数在jdk的各个版本之间很少会变化,基本不改变
- java -version,查看当前电脑上的jdk的版本信息
- java -help,查看java命令的各种选项和参数
- java -showversion,相当于上述两者结合
4. jps,查看后台运行的 java 进程
public class Test {
public static void main(String[] args) throws InterruptedException {
// 让该程序一致在后台
Thread.sleep(Integer.MAX_VALUE);
}
}
Test 的进程 id 为 29636
5. jinfo,通过进程 id 查看正在运行的 java 程序的参数信息
jinfo -flag 具体参数(XX参数) java进程编号(-flag,是一个进程号同时指定要查看的一个参数)
jinfo -flags java进程编号(-flags,是一个进程号所有的参数)
二、X参数
- java -Xint -vesion,解释执行模式
解释执行命令会告诉java虚拟机使用解释执行模式来执行程序。在解释执行模式下,Java程序的代码将逐行被解释器翻译成机器指令并执行。这种模式通常会导致程序执行速度较慢,但它可以在不同的平台上运行代码,因为不需要事先将代码编译成机器代码。
- java -Xcomp -version,第一次使用就编译成本地代码
编译执行命令会告诉java虚拟机在第一次执行程序时将代码编译成本地机器代码。这种模式下,Java程序的代码会被即时编译器翻译成机器指令,并保存下来以备下次执行使用。这样,在后续执行时,程序的执行速度会比解释执行模式下更快,因为代码已经被编译成机器代码。
- java - Xmixed -version,混合模式(JVM默认采用的模式)
混合模式命令会告诉java虚拟机在运行时根据程序的运行情况来选择解释执行或即时编译执行。在混合模式下,虚拟机会根据代码的热度来判断是否将其编译成机器代码。热度通常是通过代码的执行频率衡量的。因此,混合模式可以充分利用即时编译的性能优势,同时又能适应代码的动态性。
三、XX参数
1. Boolean 类型
公式:–XX:+或-某个属性(+表示开启,-表示关闭)
例如:-XX:+PrintGCDetails
2. K/V键值对类型
公式:-XX:某个Key=Value
例如:
-XX:MetaspaceSize=128m
-XX:MaxTenuringThreshold=15
K/V 类型中常常会有许多的简写形式
如:-Xms 等价于 -XX:InitialHeapSize=,. -Xmx 等价于 -XX:MaxHeapSize=
JVM 调优的常用参数
1. -Xms 等价于 -XX:InitialHeapSize=,初始大小内存,默认为物理内存的 1/ 64
2. -Xmx 等价于 -XX:MaxHeapSize=,最大分配内存,默认为物理内存的1 / 4
3. -Xss 等价于 -XX:ThreadStackSize=,设置单个线程栈的大小,一般默认为 512K~1024K(具体跟JVM所在的平台有关)
Window下 ThreadStackSize=0, 意思是使用的是默认值
4. -Xmn,设置年轻代的大小(只有简写,没有全称)
5. -XX:MetaspaceSize,设置元空间大小(元空间并不在虚拟机中,而是使用本地内存,因此会受本地内存大小的限制,OOM异常中就有java.lang.OutOfMemoryError: Metaspace)
6. -XX:+PrintGCDetails,输出GC收集日志的详细信息
GC 和 Full GC
7. -XX:SurvivorRatio,设置Survivo所占的比例,但总的新生代大小不变
Eden:S0:s1 = 8 : 1 : 1,即默认-XX:SurvivorRatio=8
Eden:S0:s1 = 4 : 1 : 1,即设置-XX:SurvivorRatio=4
8. -XX:NewRatio,配置新生代和老年代的比例
默认:-XX:NewRatio=2,新生代:老年代=1:2,新生代占整个堆的 1/3
假如:-XX:NewRatio=4,新生代:老年代=1:4,新生代占整个堆的 1/5
9. -XX:MaxTenuringThreshold,设置年轻代对象的最大年龄(即在Survivor中的复制轮数),超过这个次数要么进入老年代要么回收,范围[0, 15]
默认值为 15
10. -XX:+PrintFlagsInitial(查看 JVM 的默认配置,即 XX:K/V) 和 -XX:+PrintFlagsFinal(查看JVM当前的配置)
K = V,没有被修改过
K := V,被修改过
12. -XX:+PrintCommandLineFlags -version(查看默认的垃圾回收器的方式)