使用Maven Spring Boot Plugin运行应用时如何正确设置Java Xmx参数?
解决Spring Boot Maven插件3.1.4设置Xmx参数不生效的问题
问题诊断
你使用mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xmx512m"设置JVM最大内存未生效,Runtime.getRuntime().maxMemory()始终返回2GB(8G内存的默认1/4),核心原因通常是命令行参数格式错误或插件fork模式配置冲突。
解决方案
情况1:插件默认fork模式(未配置<fork>false)
Spring Boot Maven插件3.x默认会fork独立JVM运行应用,此时需根据操作系统调整命令行引号格式:
- Linux/macOS:
单个参数可直接省略引号,多参数用引号包裹:# 单个参数 mvn spring-boot:run -Dspring-boot.run.jvmArguments=-Xmx512m # 多个参数示例 mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xmx512m -Xms256m" - Windows CMD:
需将整个-D参数用双引号包裹:mvn spring-boot:run "-Dspring-boot.run.jvmArguments=-Xmx512m" - Windows PowerShell:
使用单引号包裹JVM参数:mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Xmx512m'
情况2:插件配置了<fork>false
若你的pom.xml中显式设置了<fork>false</fork>,应用会和Maven共用同一个JVM,此时spring-boot.run.jvmArguments参数无效,需通过MAVEN_OPTS环境变量设置:
- Linux/macOS:
export MAVEN_OPTS="-Xmx512m" && mvn spring-boot:run - Windows CMD:
set MAVEN_OPTS=-Xmx512m && mvn spring-boot:run - Windows PowerShell:
$env:MAVEN_OPTS="-Xmx512m"; mvn spring-boot:run
验证生效
执行命令后,可通过两种方式确认参数生效:
- 在应用中打印
Runtime.getRuntime().maxMemory(),512MB对应的数值为536870912 - 使用
jps -v命令查看应用进程,确认输出中包含-Xmx512m参数
内容的提问来源于stack exchange,提问作者morpheus
相关产品推荐
相关产品推荐

