根据自己工程实践中的经验,总结了一些基础的jvm参数相关的使用。
一. 请问如何盘点查看JVM系统默认值?
-
参数的类型
(1)标配参数 java -version java -help java -showversion (2)X参数(了解) -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式
(3)XX参数 (重点!!!)
XX参数,又分两种,一种是Boolean类型,一种是设置值类型(key-value)。
Boolean类型
公式: -XX:+/-某个属性值
+ 表示开启
- 表示关闭
案例:是否打印GC收集细节
如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?或者具体值是多少?
第一步:jps -l
第二步:jinfo -flage PrintGCDetails pid
是否使用串行垃圾收集器
第一步:jps -l
第二步:jinfo -flage UseSerialGC pid
KV设置类型
公式:-XX:属性key=属性值value
案例:-XX:MetaspaceSize=128m
-XX:MaxTenuringThreashold=15
特殊:
-Xms1024m==> -XX:InitialHeapSize=1024m 默认为物理内存的1/16
-Xmx2048m==> -XX:MaxHeapSize=2048m 默认为物理内存的1/4
小结:
第一种,查看参数盘点家底
jps -l //获得进程号
jinfo -flag 具体参数 java进程编号
jinfo -flags java进程编号
第二种,查看参数盘点家底
-XX:+PrintFlagsInitial 主要查看初始默认值: java -XX:+PrintFlagsInitial -version 或者 java -XX:+PrintFlagsInitial
-XX:+PrintFlagsFinal 主要查看经过修改的值: java -XX:+PrintFlagsFinal -version 或者 java -XX:+PrintFlagsFinal 【注意】 =默认, :=修改过
运行java命令的同时打印出参数 java -XX:+PrintFlagsFinal -XX:MetaspaceSize=512m T(运行的java的类名)
-XX:+PrintCommandLineFlags 重点查看默认垃圾收集器
二、 你平时工作用过的JVM常用基本配置参数有哪些?
-
常用参数:
-Xms 初始大小内存,默认为物理内存的1/64 等价于-XX:InitialHeapSize -Xmx 最大分配内存,默认为物理内存的1/4 等价于-XX:MaxHeapSize -Xss 设置单个线程栈的大小,一般默认为512k-1024k 等价于-XX:ThreadStackSize (官网: This option is similar to -XX:ThreadStackSize) -Xmn 设置年轻代大小,默认即可。 -XX:MetaspaceSize 元空间和永久代相似,都是JVM规范中方法区的实现。区别在于,元空间并不在虚拟机中,而是只用本地内存。因此默认情况下,元空间的大小仅受本地内存限制。 实践: -Xms10m -Xmx40m -XX:MetaspaceSize=1024m -XX:+PrintFlagsFinal -Xms10m -Xmx40m -Xss1024k -XX:MetaspaceSize=1024m -XX:+PrintFlagsFinal -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UserSerialGC -XX:+PrintGCDetials
GC日志的详细信息:
[GC (Allocation Failure) [DefNew: 1134K->320K(3072K), 0.0009534 secs][Tenured: 245K->564K(6848K), 0.0009817 secs] 1134K->564K(9920K), [Metaspace: 221K->221K(4480K)], 0.0019739 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[Full GC (Allocation Failure) [Tenured: 564K->549K(6848K), 0.0008397 secs] 564K->549K(9920K), [Metaspace: 221K->221K(4480K)], 0.0008536 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
-XX:SurvivorRatio 设置新生代中eden和s0/s1空间的比例,默认是:-XX:SurvivorRatio=8, Eden:S0:S1=8:1:1
-XX:NewRatio
-XX:MaxTenuringThreshold 设置垃圾的最大年龄,0-15,