标准参数
jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变
可以使用java -help 检索出所有的标准参数。
java ‐help
-version
public class VmTest {
public static void main(String[] args) {
SpringApplication.run(VmTest.class,args);
}
}
public class TestJVM {
public static void main(String[] args) {
String str = System.getProperty("str");
if (str == null) {
System.out.println("555");
} else {
System.out.println(str);
}
}
}
#编译
[root@node01 test]# javac TestJVM.java
#测试
[root@node01 test]# java TestJVM
itcast
[root@node01 test]# java ‐Dstr=123 TestJVM
123
通过-server或-client设置jvm的运行参数
JVM在启动的时候会根据硬件和操作系统自动选择使用 Serveri还是Client类型的JVM
32位操作系统
如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM
如果是其他操作系统上,机器配置有2GB以上的内存同,时有2个以上CPU的话默认使用server模式,否则使用client模式
64位操作系统:只有server类型,不支持client类型
-X参数 (非标准参数 不保证每个JVM都支持)
附加选项(Extra Options for Java) java 11 中命名
HotSpot虚拟机的通用选项,其他厂牌的JVM不一定会支持这些选项,并且在未来可能会发生变化。这些选项以-X开头。
- -Xint :解释模式(interpreted mode)下,会强制JVM执行所有的字节码,当然这会降低运行速度,通常低10倍或更多
- -Xcomp:与(-Xint)正好相反,JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化
- -Xmixed:混合模式,将解释模式与编译模式进行混合使用,由jvm自己决定,这是jvm默认的模式,也是推荐使用的模式
-XX参数(开发用)
boolean类型:
格式:-XX:[+-]
如:-XX:+DisableExplicitGC 表示禁用手动调用gc操作,也就是说调用system.gc()无效
-XX:+PrintFlagsFinal
非boolean类型
格式:-xx
如:-XX:NewRatio=1表示新生代和老年代的比值。
- = 默认值
- := 被修改的值
打印相关的
XX:+PrintCommandLineFlags 程序运行时JVM默认设置或用户手动设置的XX选项
-XX:+PrintFlagsInitial 打印所有XX选项的默认值
-XX:+PrintFlagsFinal 打印所有XX选项的实际值-XX:+PrintVMOptions 打印JVM的参数
堆、栈、方法区和内存等
栈:
-Xss128k<==>-XX:Threadstacksize=128k 设置线程栈的大小为128K
堆:
-Xms2048m<==>-XX:InitialHeapsize=2048m 设置JVM初始堆内存为2048M
-Xmx2048m<==>-XX:MaxHeapsize=2048m 设置JVM最大堆内存为2048M
-Xmn2g<==>-XX:Newsize=2g-xx:MaxNewsize=2g 设置年轻代大小为2G
-xx:SurvivorRatio=8 设置Eden区与survivor区的比值,默认为8
-xx:NewRatio=2 设置老年代与年轻代的比例,默认为2
-xx:+UseAdaptivesizePolicy 设置大小比例自适应,默认开启
-Xx:Pretenuresizerhreadshold=1024 设置让大于此阈值的对象直接分配在老年代,只对seria1、parNew收集器有效
-xx:MaxrenuringThreshold=15 设置新生代晋升老年代的年龄限制,默认为15
-XX:TargetsurvivorRatio 设置MinorGc结束后Survivor区占用空间的期望比例
方法区:
-XX:Metaspacesize /-XX:Permsize=256m 设置元空间/永久代初始值为256M
-XX:MaxMetaspacesize/-Xx:MaxPermsize=256m 设置元空间/永久代最大值为256M
-XX:+UseCompressedoops 使用压缩对象
-XX:+UseCompressedClassPointers使用压缩类指针
-XX:CompressedClassSpacesize 设置Klass Metaspace的大小,默认1G#
直接内存:-XX:MaxDirectMemorySize 指定DirectMemory容量,默认等于Java堆最大值
OutOfMemory 相关的选项
-XX:+HeapDumpOnOutMemoryError 内存出现OOM时生成Heap转储文件,两者互斥-XX:+HeapDumpBeforeFullGC 出现FullGC时生成Heap转储文件,两者互斥
-XX:HeapDumpPath=<path>指定heap转储文件的存储路径,默认当前目录-XX:OnOutOfMemoryError=<path>指定可行性程序或脚本的路径,当发生OOM时护行脚本
GC 日志相关选项
-XX:+PrintGC <==>-verbose:gc打印简要日志信息
-XX:+PrintGCDetails打印详细日志信息
-XX:+PrintGcrimeStamps 打印程序启动到GC发生的时间,搭配-xx:+Printccpetai1s使用-XX:+PrintGcDatestamps 打印GC发生时的时间戳,搭配-xx:+PrintGcpetails使用-xx:+PrintHeapatGc 打印GC前后的信息
-xloggc:<file>输出GC导指定路径下的文件中
-XX:+TraceClassLoading监控类的加载
-XX:+PrintGcApplicationstoppedrime 打印GC时线程的停顿时间-X%:+PrintGCapplicationconcurrentrime 打印垃圾收集之前应用未中断的执行时间-xx:+PrintReferenceGc 打印回收了多少种不同引用类型的引用-XX:+PrintTenuringDistribution 打印JVM在每次MinorGc后当前使用的survivor中对象的年-XX:+UseGCLogFileRotation 启用GC日志文件的自动转储
-XX:NumberOfGCLogFiles=1设置GC日志文件的循环数目
-XX:GCLogFilesize=lM设置GC日志文件的大小