常见配置汇总
堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置新生代大小
-Xmn:设置新生代大小
-XX:NewRatio=n:设置新生代和老生代的比值。如:为3,表示新生代与老生代比值为1:3,新生代占整个新生代老生代和的1/4
-XX:SurvivorRatio=n:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5
-XX:MaxPermSize=n:设置永久带大小
收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行老生代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
-XX:ParallelGCThreads=n:设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数。
1 跟踪调试参数
1.1 跟踪垃圾回收
-XX:+PrintGC:使用这个参数启动Java虚拟机后,只要遇到GC,就会打印日志。
-XX:+PrintGCDetails:获取更详细的GC信息。
-XX:+PrintHeapAtGC:可以在每次GC前后分别打印堆的信息。
-XX:+PrintGCTimeStamps:会在每次GC发生时,额外输出GC发生的时间,该输出时间为虚拟机启动后的时间偏移量。
-XX:+PrintGCApplicationConcurrentTime:可以打印应用程序的执行时间
-XX:+PrintGCApplicationStoppedTime:可以打印应用程序由于GC而产生的停顿时间。
-XX:+PrintReferenceGC:用来跟踪系统内的软引用、弱引用、虚引用和Finallize队列。
1.2 类加载/卸载的跟踪
-XX:+TraceClassLoading:跟踪类的加载。
-XX:+TraceClassUnloading:跟踪类的卸载。
-XX:+PrintClassHistogram:打印、查看系统中类的分布情况。
1.3 系统参数查看
-XX:+PrintVMOptions:在运行时,打印虚拟机接收到命令行显示参数。
-XX:+PrintCommandLineFlags:打印传递给虚拟机的显式和隐式参数,隐式参数未必是通过命令行直接给出的,它可能是由虚拟机启动时自行设置的。
-XX:+PrintFlagsFinal:打印所有的系统参数的值。
2 堆参数配置
2.1 最大堆和初始堆的设置
-Xmx,-Xms:分别表示最大堆空间和初始堆空间大小。
在实际工作中,可以直接将初始堆和最大堆空间设置相等,这样做可以减少垃圾回收次数,提高程序性能。
2.2 新生代
-Xmn:可以用于设置新生代的大小。新生代的大小会直接影响到老年代的大小,这个参数堆系统性能以及GC行为由很大的影响。新生代的大小一般设置为整个堆空间的1/3到1/4左右。
-XX:SurvivorRatio:用来设置新生代中eden空间和from/to空间的比例关系。
2.3 堆溢出处理
在Java程序运行的过程中,如果堆空间不足,则有可能抛出内存溢出错误(out of memory)简称为OOM。
-XX:+HeapDumpOnOutOfMemoryError:在内存溢出时导出整个堆信息。
-XX:+HeapDumpPath:指定堆的存放路径。
3 非堆内存的参数配置
-XX:MaxMetaspaceSize:指定元空间的最大可用值。
-Xss:指定线程的栈大小。
-XX:MaxDirectMemorySize:最大可用直接内存,如不设置,默认值为最大堆空间。直接内存的溢出依然会引起系统的OOM。
4 虚拟机工作模式:Client和Server
-client和-server:分别指定虚拟机使用Client模式和Server模式。
参考引用其他:
深入浅出JVM调优,看完你就懂
https://blog.csdn.net/Javazhoumou/article/details/99298624
深入理解java虚拟机——常用虚拟机参数
https://www.jianshu.com/p/8c553e48166c
java 虚拟机(jvm)基本概念和虚拟机参数配置
https://www.jianshu.com/p/605e54cc4d40
Java虚拟机(JVM)你只要看这一篇就够了!
https://blog.csdn.net/qq_41701956/article/details/81664921