一、你说你做过JVM调优和参数配置,请问如何盘点查看MM系统默认值?
1、JVM的标配参数和X参数
(1)标配参数
标配参数 1
标配参数 2
在jdk各个版本稳定,很少有很大变化
(2)X参数(了解)
X参数
2、JVM的XX参数之布尔类型
(1)公式:-XX:+或者-某个属性值
其中:
+:表示开启 -:表示关闭
(2)两方面举类:
1、是否打印收集gc细节
-XX: +PrintGCDetails
-XX: -PrintGCDetails 2、是否使用串行垃圾收集器
-XX: -UseSeialGC
-XX: +UseSerialGC
代码实现:
package com.study.jvmgc;
public class HelloGC {
public static void main(String[] args) throws Exception{
System.out.println("************HelloGC");
Thread.sleep(Integer.MAX_VALUE);
}
}
运行操作,添加jvm参数:
如何查看正在运行中java程序,它的某个参数是否开启?具体值是多少?
可以采用两个命令:jps、jinfo
查看正在运行中java程序,它的某个参数是否开启?
E:interview2020-mastersrcmainjavacomstudythread>jinfo -flag PrintGCDetails 11504
想要把jvm的参数开启,我们需要指定VM参数:
再次启动程序:
3、JVM的XX参数设值类型(JVM调参)
kv设置类型
(1)公式
jinfo -flag 配置项 进程编号
(2)两参数举类:
1、-XX:MetaspaceSize = 128
2、-XX:MaxTenuringThreshold = 15
操作图:
1
2
另一种jvm参数配置:
启动后:
默认值是:21807104,设置值:1262485504,以上可以证实有两种类型:Boolean(默认值)、设置值(kv值)
其中kv值,根据自身业务的需要来调整参数。
还有一种,设置年老值
E:interview2020-master>jinfo -flag MaxTenuringThreshold 4812
-XX:MaxTenuringThreshold=15
4、JVM的XX参数之XmsXmx坑题
E:interview2020-master>jps -l
12272
4016 org.jetbrains.idea.maven.server.RemoteMavenServer36
8080 sun.tools.jps.Jps
12456 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
13816 org.jetbrains.jps.cmdline.Launcher
4812 com.study.jvmgc.HelloGC
E:interview2020-master>jinfo -flags 4812
Attaching to process ID 4812, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.40-b25
//系统配置,包括(新生代、年老区)
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2118123520 -XX:MaxNewSize=705691648 -XX:MetaspaceSize=1262485504 -XX:MinHeapDeltaByt
es=524288 -XX:NewSize=44564480 -XX:OldSize=89653248 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocat
ion -XX:+UseParallelGC
//人工配置
Command line: -XX:MetaspaceSize=1204m -javaagent:D:javaidea201903config-pathclassIntelliJ IDEA 2019.3.3libidea_rt.jar=53467:D:javaidea201903config-pathclassIntelli
J IDEA 2019.3.3bin -Dfile.encoding=UTF-8
E:interview2020-master>jinfo -flag InitialHeapSize 4812
-XX:InitialHeapSize=134217728
E:interview2020-master>jinfo -flag UseSerialGC 4812
-XX:-UseSerialGC
E:interview2020-master>jinfo -flag UseParallelGC 4812
-XX:+UseParallelGC
E:interview2020-master>jinfo -flag MaxHeapSize 4812
-XX:MaxHeapSize=2118123520
E:interview2020-master>
(1)题外坑
两个经典参数:-Xms和-Xmx
其中:
-XX:InitialHeapSize
-Xmx: 等价于 -XX:MaxHeapSize
5、JVM盘点家底查看初始默认值
初始化参数(没动过的参数)
E:interview2020-master>java -XX:+PrintFlagsInitial //盘点家底查看初始默认值
如图所示:
查看版本:
E:interview2020-master>java -XX:+PrintFlagsFinal -version
如图所示:
堆空间初始化大小:(内存条不一样,初始化的参数也就不同)修改以后的参数
“=”表示jvm默认值没改过参数,“:=”表示用户改过的参数;
6、JVM盘点家底查看修改变更值
E:interview2020-master>java -XX:+PrintFlagsFinal -XX:MetaspaceSize=512m
查看修改变更值
//这个命令的作用主要看最后一个参数“UseParallelGC”,决定了本次jvm默认的垃圾回收用的是哪一种
E:interview2020-master>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=132335808 -XX:MaxHeapSize=2117372928 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocat
ion -XX:+UseParallelGC
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
E:interview2020-master>
gc的四大算法:引用计数、标志拷贝、标记清除、标记整理
这个命令的作用主要看最后一个参数“UseParallelGC”,决定了本次jvm默认的垃圾回收用的是哪一种,而UseParallelGC是并行垃圾回收gc