1、JVM 的参数类型有哪几种?
- 标配参数
version
help - X 参数(了解)
Xint:解释执行
Xcomp:第一次使用就编译成本地代码
Xmixed:混合模式 - XX 参数(重点)
Boolean 类型:-XX:+ 或者 - 某个属性值(+ 表示开启,- 表示关闭)
-XX:+PrintGCDetails:打印 GC 收集细节
-XX:-PrintGCDetails:不打印 GC 收集细节
-XX:+UseSerialGC:使用了串行收集器
-XX:-UseSerialGC:不使用了串行收集器
KV 设置类型:-XX:key=value
-XX:MetaspaceSize=128m
-XX:MaxTenuringThreshold=15
jinfo 举例,如何查看当前运行程序的配置
死锁代码:
package com.example.rabbitmq.test.nio;
public class DeadLockDemo {
public static void main(String[] args) {
String lock1="lock1";
String lock2="lock2";
new Thread(()->{
try {
dealLockMethod(lock1,lock2);
} catch (InterruptedException e) {
e.printStackTrace();
}
},"AAA").start();
new Thread(()->{
try {
dealLockMethod(lock2,lock1);
} catch (InterruptedException e) {
e.printStackTrace();
}
},"BBB").start();
}
//死锁方法
public static void dealLockMethod(String lock1,String lock2) throws InterruptedException {
//获取一个锁,尝试再获取另一个锁
synchronized (lock1){
System.out.println("获取一个锁="+lock1+",再尝试获取其他锁="+lock2);
Thread.sleep(2000);
//尝试获取第二把锁
synchronized (lock2){
System.out.println("尝试获取第二把锁="+lock2);
}
}
}
}
我们可以使用 jps -l 命令查看进程ID
7952 com.example.rabbitmq.test.nio.DeadLockDemo
4932 sun.tools.jps.Jps
10648 org.jetbrains.jps.cmdline.Launcher
10856
11032 org.jetbrains.idea.maven.server.RemoteMavenServer36
再使用 jinfo -flag PrintGCDetails 7952 命令查看
可以看出默认是不打印 GC 收集细节
也可是使用jinfo -flags 7952 查看所以的参数
- 两个经典参数:-Xms 和 - Xmx(如 -Xms1024m)
-Xms 等价于 -XX:InitialHeapSize
-Xmx 等价于 -XX:MaxHeapSize
2、盘点家底,查看 JVM 默认值
- 查看初始默认值:-XX:+PrintFlagsInitial
cuzz@cuzz-pc:~/Project/demo$ java -XX:+PrintFlagsInitial
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
uintx AdaptiveSizePausePolicy = 0 {product}
uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product}
uintx AdaptiveSizePolicyOutputInterval = 0 {product}
uintx AdaptiveSizePolicyWeight = 10 {product}
...
- 查看修改更新:-XX:+PrintFlagsFinal
bool UsePSAdaptiveSurvivorSizePolicy = true {product}
bool UseParNewGC = false {product}
bool UseParallelGC := true {product}
bool UseParallelOldGC = true {product}
bool UsePerfData = true {product}
bool UsePopCountInstruction = true {product}
bool UseRDPCForConstantTableBase = false
= 与 := 的区别是,一个是默认,一个是人物改变或者 jvm 加载时改变的参数。
- 打印命令行参数(可以看默认垃圾回收器):-XX:+PrintCommandLineFlags
cuzz@cuzz-pc:~/Project/demo$ java -XX:+PrintCommandLineFlags
-XX:InitialHeapSize=128789376 -XX:MaxHeapSize=2060630016 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC