JVM参数
JVM参数
JVM參數類型:
- 標準參數:所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
- x參數:默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
- xx參數:此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
- Boolean類型:公式:-XX:+/-某個屬性(+表示開啓,-表示關閉)
- 设置类型:公式:-XX: 属性key=属性value //-XX:MetaspaceSize=20m
在命令行查看某个参数值:
- jps -l 查看运行线程信息获得进程号
- jinfo -flag PrintGCDetails 进程号:查看PrintGCDetails信息
- jinfo -flags 进程号:查看进程号的所有参数
查看jvm初始化参数:
- -XX:+PrintFlagsInitial (-version)
- -XX:+PrintFlagsFinal
- -XX:+PrintFlagsFinal -XX:MetaspaceSize=512M(设置本次值)(:=表示被人为或者JVM初始修改过)
- -XX:+PrintCommandLineFlags( -XX:+UseParallelGC:默认垃圾回收:使用并行GC)
- 串行(SerialGC)是jvm的默认GC方式,一般适用于小型应用和单处理器,算法比较简单,GC效率也较高,但可能会给应用带来停顿;
- 并行(ParallelGC)是指GC运行时,对应用程序运行没有影响,GC和app两者的线程在并发执行,这样可以最大限度不影响app的运行;
- 并发(ConcMarkSweepGC)是指多个线程并发执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大;
C:\Users\XXX>java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=132176320 -XX:MaxHeapSize=2114821120 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode) C:\Users\XXX>jps -l 122852 org.jetbrains.jps.cmdline.Launcher 107656 134008 sun.tools.jps.Jps C:\Users\XXX>jinfo -flag UseParallelGC 122852 -XX:+UseParallelGC
Java常用内存參數
- -Xmx:jvm堆最大值 (-XX:MaxHeapSize)默认为内存1/4(Runtime.getRuntime().maxMemory()java试图使用的内存总量)jinfo -flag ThreadStackSize 进程号 默认值的话显示为0(默认为1024K)
- -Xmn:JVM堆年轻代大小
- -Xms:JVM堆初始值 (-XX:InitialHeapSize)默认为内存1/64(Runtime.getRuntime().totalMemory()返回java虚拟机的内存总量)
- -Xss:單個綫程棧大小 一般为512K~1024K
- -XX:MetaspaceSize 设置元空间大小,元空间和永久代类似,都是对JVM规范中对方法区的实现,不过和永久代的区别在于,永久代在堆中存储,元空间不在虚拟机中,使用本地内存,因此默认元空间只受本地内存限制,但默认20M左右,容易溢出(常用设置:-Xmx4096M -Xms128M -Xss1024K -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:UseSerialGC)
- -XX:+PrintGCDetails 输出详细GC收集日志信息 包括YongGC和FullGC
- -XX:SurvivorRatio 设置JVM中新时代Eden和s0, s1的比例大小(-XX:SurvivorRatio=8, Eden:S0:S1=8:1:1)
- -XX:NewRatio 配置新生代和老年代在堆中的占比默认为2(-XX:NewRatio=4,设置老年代,剩下新生代为1即为4:1)
- -XX:MaxTenuringThreshold 设置养老区的最大年龄,默认为15(如果设置为0 的话,则年轻代不经过survivor区直接去老年代,对于老年代比较多的情况,可以提高效率;如果值比较大,可以增加对象在年轻代的时间,增加年轻代被回收的概率)