JVM参数
前面已经提到过很多JVM的参数了,这节再简单汇总下,以及部分不常用的参数。
Java启动参数共分为三类:
- 标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容,如 -version、-classpath
- 非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容,如 -Xms、-Xmx
- 非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用,如 -XX:UseParNewGC、-XX:MetaspaceSize
1、JVM标准参数(-)
通过 java -help 命令可以看到JVM的标准参数
2、JVM非标准参数(-X)
通过 java -X 命令可以看到JVM非标准参数
常用参数:
3、JVM非Stable参数(-XX)
JVM非Stable参数分为三类:
- 功能开关参数:一些功能的开关,用于改变jvm的一些基础行为
- 性能调优参数:用于jvm的性能调优
- 调试参数:一般用于打开跟踪、打印、输出等jvm参数,用于显示jvm更加详细的信息
注意:带有加号“+”、减号“-”的参数一般为开关参数,加号就是启用,减号就是禁用,如 -XX:+/-UseAdaptiveSizePolicy。不带加减号的就需要通过等号“=”带上参数值,如 -XX:SurvivorRatio=8。
可以通过设置 -XX:+PrintFlagsFinal 在启动时打印所有JVM的参数及其值。
1)功能开关参数
① 垃圾回收器相关参数
② 其它的一些参数
2)性能调优参数
3)调试参数
4、即时编译调优参数
类初始化完成后,类在调用执行过程中,执行引擎会把字节码转为机器码,然后在操作系统中才能执行。在字节码转换为机器码的过程中,虚拟机中还存在着一道编译,那就是即时编译。最初,虚拟机中的字节码是由解释器( Interpreter )完成编译的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,即时编译器(JIT)会把这些代码编译成与本地平台相关的机器码,并进行各层次的优化,然后保存到内存中。如果没有 JIT 即时编译,每次运行相同的代码都会使用解释器编译。
与编译优化有关的主要有即时编译器的选择、热点探测计数阀值的优化、方法内联、逃逸分析、锁消除、标量替换等,一般来说也不用对编译进行调优,这里就不展开说了,下面先列举下编译优化相关的一些JVM参数。
郭慕荣博客园