【发布时间】:2020-11-05 15:32:13
【问题描述】:
我使用 Springboot 构建了一个简单的应用程序。我在部署到 Linux 服务器时使用的 ZGC 垃圾收集器使用大量内存..我尝试使用 Xmx500m 将最大堆内存限制为 500MB,但 JAVA 程序仍然使用更多超过 1GB。我用G1采集器的时候只用了350MB。不知道为什么,这是JDK11的BUG吗?还是我的启动参数有问题? ####运行时环境
- 操作系统:CentOS Linux 7.8.2003 版
- JDK 版本:jdk11
- springboot 版本:v2.3.0.RELEASE 这是我的 Java 启动命令
java -Xms128m -Xmx500m \
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC \
-jar app.jar
这是运行时内存使用情况的截图
堆内存使用情况 https://github.com/JoyfulAndSpeedyMan/assets/blob/master/2020-07-13%20201259.png?raw=true
系统内存使用情况 https://github.com/JoyfulAndSpeedyMan/assets/blob/master/2020-07-13%20201357.png?raw=true
使用默认垃圾收集器时会发生以下情况 Java 启动命令
java -Xms128m -Xmx500m \
-jar app.jar
堆内存使用情况 https://github.com/JoyfulAndSpeedyMan/assets/blob/master/2020-07-13%20202442.png?raw=true
系统内存使用情况 https://github.com/JoyfulAndSpeedyMan/assets/blob/master/2020-07-13%20202421.png?raw=true
默认情况下 jdk11 使用 G1 垃圾收集器。从理论上讲,G1不应该比ZGC更占用内存吗?我为什么不那样使用它?我误会了吗?由于我是JVM的初学者,我不明白为什么。
【问题讨论】: