我使用Springboot构建了一个简单的应用程序。当我在Linux服务器上部署时,我使用的ZGC垃圾回收器会使用很多内存。尽管我尝试将最大堆内存限制为500MB(使用Xmx500m),但JAVA程序仍然使用超过1GB的内存。而当我使用G1回收器时,只使用了350MB。我不知道原因是什么,是JDK11的BUG吗?还是我的启动参数存在问题?
####运行环境- 操作系统: CentOS Linux release 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 的初学者,所以不明白原因。