JVM -XX参数测试

JVM XX参数

布尔类型

公式-XX:+某个属性-XX:-某个属性,开启或关闭某个功能。比如-XX:+PrintGCDetails,开启GC详细信息。

KV键值类型

公式-XX:属性key=值value。比如-XX:Metaspace=128m-XX:MaxTenuringThreshold=15

JVM Xms/Xmx参数

-Xms-Xmx十分常见,用于设置初始堆大小最大堆大小。第一眼看上去,既不像X参数,也不像XX参数。实际上-Xms等价于-XX:InitialHeapSize-Xmx等价于-XX:MaxHeapSize。所以-Xms-Xmx属于XX参数。

JVM 查看参数

查看某个参数

使用jps -l配合jinfo -flag JVM参数 pid 。先用jsp -l查看java进程,选择某个进程号。

17888 org.jetbrains.jps.cmdline.Launcher
5360 org.jetbrains.idea.maven.server.RemoteMavenServer
18052 demo3.demo3

jinfo -flag PrintGCDetails 18052可以查看18052 Java进程的PrintGCDetails参数信息。

-XX:-PrintGCDetails

查看所有参数

使用jps -l配合jinfo -flags pid可以查看所有参数。

也可以使用java -XX:+PrintFlagsInitial

[Global flags]
    intx ActiveProcessorCount                      = -1           {product}
   uintx AdaptiveSizeDecrementScaleFactor          = 4             {product}
   uintx AdaptiveSizeMajorGCDecayTimeScale         = 10           {product}
   uintx AdaptiveSizePausePolicy                   = 0             {product}
······
   uintx YoungPLABSize                             = 4096         {product}
    bool ZeroTLAB                                  = false         {product}
    intx hashCode                                  = 5             {product}

查看修改后的参数

使用java -XX:+PrintFlagsFinal可以查看修改后的参数,与上面类似。只是修改过后是:=而不是=

查看常见参数

如果不想查看所有参数,可以用-XX:+PrintCommandLineFlags查看常用参数。

-XX:InitialHeapSize=132375936 -XX:MaxHeapSize=2118014976 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

JVM 常用参数

-Xmx/-Xms

最大和初始堆大小。最大默认为物理内存的1/4,初始默认为物理内存的1/64。

-Xss

等价于-XX:ThresholdStackSize。用于设置单个栈的大小,系统默认值是0,不代表栈大小为0。而是根据操作系统的不同,有不同的值。比如64位的Linux系统是1024K,而Windows系统依赖于虚拟内存。

-Xmn

新生代大小,一般不调。

-XX:MetaspaceSize

设置元空间大小。

-XX:+PrintGCDetails

输出GC收集信息,包含GCFull GC信息。

-XX:SurvivorRatio

新生代中,Eden区和两个Survivor区的比例,默认是8:1:1。通过-XX:SurvivorRatio=4改成4:1:1

-XX:NewRatio

老生代和新年代的比列,默认是2,即老年代占2,新生代占1。如果改成-XX:NewRatio=4,则老年代占4,新生代占1。

-XX:MaxTenuringThreshold

新生代设置进入老年代的时间,默认是新生代逃过15次GC后,进入老年代。如果改成0,那么对象不会在新生代分配,直接进入老年代。

实验操作:

- 代码如下所示

- 使用jps -l 和jinfo = flag <选项> 进程号 查看运行中程序boolean选项是否开启,以及k-v选项的值

 

 

 

 - 查看进程所有JVM参数,包括默认和自定义配置

 

 

 - 查看JVM初始化参数

 

 

 - java -XX:+PrintFlagsFinal -<配置> T。运行的同时查看修改参数和所有参数。

- 以下查看常见参数,主要为使用的垃圾回收器。

 

 

 代码如下:

 

运行如下:

 

 

常用配置:

 

 

GC日志分析:

 

 FullGC日志分析:

 

 

 

 - 参考资料: https://github.com/XU-ZHOU/Java     https://www.bilibili.com/video/av48961087?p=60

posted @ 2020-03-05 17:08  通行人C  阅读(418)  评论(0编辑  收藏  举报