# jvm常见参数

四个重要参数 **-Xms、-Xmx、GC算法、-XX:MaxMetaspaceSize**

#### 使用环境变量设置

```

JAVA_TOOL_OPTIONS="-Xms3g -Xmx3g -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC"

# -Xms 初始化堆大小
# -Xmx 最大堆大小
# -Xss 每个线程的栈大小（可以不设置）

# -Xms和-Xmx应该设置为一样的值，如果没有设置，默认值为物理内存的1/4

# -XX:+UseG1GC GC算法，小于32G内存
# -XX:+UseZGC  GC算法，大于32G内存

```

#### 在java -jar 命令中设置

```

java -Xms3g -Xmx3g -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC -jar app.jar

```




#### 参数参考

计算可分配内存大小：
- 物理内存的75%
- 总的物理内存 减 操作系统需要的（8G），在除以实例数，就是每个实例可以分配的内存

> Xms和Xmx应该设置成一样的，避免反复GC，如果没有设置，默认值为物理内存的1/4

> -XX:MaxMetaspaceSize ， 元数据空间存放的是类的结构信息、方法的字节码、常量池、注解、泛型信息等。意思是动态加载的反射、代理、AOP等都会缓存下来。他的作用是放置加载过多的类把内存用尽了。数值选择是-Xmx的10%。也可以直接使用最大值2G，元数据空间不可能大于2G

> GC算法:
<br /> -XX:+UseG1GC　　　　// ≤32 g 堆
<br /> -XX:+UseZGC　　　　 // >32 g 或低延迟场景

#### 查看内存使用情况

```shell

ps -p 24053 -o pid,vsz,rss,comm

# <PID>：替换为你要查看的进程 ID。
# vsz：虚拟内存大小（单位：KB）。
# rss：实际占用的物理内存（单位：KB）。
# comm：进程名。

```

```shell

cat /proc/24053/status |grep -i vm

# VmSize：虚拟内存总量（KB）。
# VmRSS：实际使用的物理内存（KB）。
# VmData：数据段大小。
# VmStk：栈大小。
# VmExe：代码段大小。

```