Java中-jar命令参数设置的完整指南

 更新时间:2026年03月15日 09:28:30   作者:Full Stack Developme  
这篇文章主要为大家详细介绍了Java中-jar命令参数设置有哪些分类以及如何设置,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

java -jar 命令的参数设置可以分为几类,以下是详细的参数说明:

一、标准参数(Standard Options)

1.JVM 内存设置

# 堆内存设置
-Xms512m              # 初始堆大小
-Xmx2g                # 最大堆大小
-Xmn1g                # 新生代大小
# 方法区(元空间)设置
-XX:MetaspaceSize=256m   # 初始元空间大小
-XX:MaxMetaspaceSize=512m # 最大元空间大小
# 栈内存设置
-Xss256k              # 每个线程的栈大小

2.GC 相关参数

# 指定垃圾收集器
-XX:+UseG1GC          # 使用 G1 收集器
-XX:+UseParallelGC    # 使用并行收集器
-XX:+UseConcMarkSweepGC # 使用 CMS 收集器
-XX:+UseZGC           # 使用 ZGC(Java 11+)
-XX:+UseShenandoahGC  # 使用 ShenandoahGC

# GC 日志
-Xlog:gc*:logs/gc.log:time,uptime,level,tags
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC
-XX:+PrintTenuringDistribution

二、系统属性设置

1.使用 -D 设置系统属性

java -jar \
  -Dserver.port=8080 \
  -Dspring.profiles.active=prod \
  -Dlogging.level.root=INFO \
  -Djava.net.preferIPv4Stack=true \
  app.jar

2.常用系统属性示例

# 网络相关
-Djava.net.preferIPv4Stack=true
-Djava.net.preferIPv6Addresses=false

# 文件编码
-Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8

# 时区设置
-Duser.timezone=Asia/Shanghai

# 安全策略
-Djava.security.egd=file:/dev/./urandom  # 加速随机数生成

三、程序参数

1.在 jar 文件后添加程序参数

java -jar app.jar --server.port=9090 --spring.datasource.url=jdbc:mysql://localhost:3306/db

2.标准输入输出重定向

java -jar app.jar > output.log 2>&1       # 重定向输出和错误到文件
java -jar app.jar < input.txt             # 从文件读取输入

四、完整示例

1.Spring Boot 应用示例

java -jar \
  -Xms512m \
  -Xmx2g \
  -Xmn256m \
  -XX:MetaspaceSize=128m \
  -XX:MaxMetaspaceSize=256m \
  -XX:+UseG1GC \
  -XX:+PrintGCDetails \
  -XX:+PrintGCDateStamps \
  -Xloggc:./logs/gc.log \
  -Dspring.profiles.active=prod \
  -Dserver.port=8080 \
  -Dfile.encoding=UTF-8 \
  -Duser.timezone=Asia/Shanghai \
  myapp.jar \
  --logging.file.path=./logs \
  --spring.datasource.url=jdbc:mysql://localhost:3306/mydb

2.微服务应用配置

java -jar \
  -Xms1g \
  -Xmx2g \
  -XX:+UseZGC \
  -XX:+ZGenerational \
  -XX:MaxGCPauseMillis=200 \
  -XX:+HeapDumpOnOutOfMemoryError \
  -XX:HeapDumpPath=./heapdump.hprof \
  -Dspring.cloud.config.uri=http://config-server:8888 \
  -Deureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka \
  -Dspring.zipkin.base-url=http://zipkin:9411 \
  service.jar

五、性能优化参数

1.JIT 编译优化

-XX:+TieredCompilation      # 分层编译(Java 8 默认)
-XX:TieredStopAtLevel=1     # 只使用 C1 编译器
-XX:ReservedCodeCacheSize=256m  # 代码缓存大小

2.堆外内存设置

-XX:MaxDirectMemorySize=256m    # 直接内存大小
-Dio.netty.maxDirectMemory=0    # Netty 直接内存设置

3.监控和调试

# 内存溢出时生成堆转储
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./heapdump.hprof

# JMX 监控
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

# 远程调试
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

六、容器环境优化

Docker/K8s 环境

# 使用容器内存限制
-XX:+UseContainerSupport      # 自动使用容器内存限制(Java 8u191+)
-XX:MaxRAMPercentage=75.0     # 使用容器内存的 75%
-XX:InitialRAMPercentage=50.0 # 初始使用 50%

# 或者直接设置
-XX:MaxRAM=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)

七、常见问题解决参数

1.时区问题

-Duser.timezone=GMT+08

2.DNS 缓存

-Dsun.net.inetaddr.ttl=60      # DNS 缓存时间(秒)

3.SSL/TLS 设置

-Djavax.net.debug=ssl          # 调试 SSL
-Dhttps.protocols=TLSv1.2,TLSv1.3

八、命令行使用技巧

1.多行书写(Linux/Mac)

java -jar \
  -Xmx2g \
  -Dspring.profiles.active=prod \
  app.jar

2.Windows 环境

java -jar ^
  -Xmx2g ^
  -Dspring.profiles.active=prod ^
  app.jar

3.使用环境变量

export JAVA_OPTS="-Xmx2g -Dspring.profiles.active=prod"
java $JAVA_OPTS -jar app.jar

注意事项

  • 参数顺序:JVM 参数在 -jar 之前,程序参数在 jar 文件之后
  • 内存设置:根据应用实际情况调整,避免过大或过小
  • 监控配置:生产环境建议配置 GC 日志和内存溢出转储
  • 版本兼容:某些参数仅适用于特定 Java 版本

根据具体应用需求和运行环境,选择合适的参数组合可以显著提升应用性能和稳定性。

相关文章

  • SpringCloud实现服务调用feign与熔断hystrix和网关gateway详细分析

    SpringCloud实现服务调用feign与熔断hystrix和网关gateway详细分析

    这篇文章主要介绍了SpringCloud实现服务调用feign与熔断hystrix和网关gateway,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04
  • 学习Java多线程之volatile域

    学习Java多线程之volatile域

    这篇文章主要为大家详细介绍了Java多线程之volatile域,Java 语言提供了一种稍弱的同步机制,即volatile,本文为大家解答,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • SpringBoot读取配置的6种方式

    SpringBoot读取配置的6种方式

    本文主要介绍了SpringBoot读取配置的6种方式,主要包括使用默认配置、使用application.properties文件、使用application.yml文件、使用@Value注解、使用Environment对象和使用ConfigurableEnvironment对象,感兴趣的可以了解一下
    2023-08-08
  • IDEA中如何引入spring的命名空间

    IDEA中如何引入spring的命名空间

    这篇文章主要介绍了IDEA中如何引入spring的命名空间问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java通过反射来打印类的方法实现

    Java通过反射来打印类的方法实现

    本文主要介绍了Java通过反射来打印类的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Mybatis入门教程之新增、更新、删除功能

    Mybatis入门教程之新增、更新、删除功能

    这篇文章给大家介绍了Mybatis进行基本的增删改操作,非常不错,具有参考借鉴价值,需要的的朋友参考下
    2017-02-02
  • Java线程通讯的实现方法总结

    Java线程通讯的实现方法总结

    线程通讯指的是多个线程之间通过共享内存或消息传递等方式来协调和同步它们的执行,线程通讯的实现方式主要有以下两种:共享内存和消息传递,本文详细介绍了Java线程是如何通讯的,感兴趣的同学可以参考阅读
    2023-05-05
  • 对象转Json字符串时如何忽略指定属性

    对象转Json字符串时如何忽略指定属性

    这篇文章主要介绍了对象转Json字符串时如何忽略指定属性,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java开发中的volatile你必须要了解一下

    Java开发中的volatile你必须要了解一下

    这篇文章主要给大家介绍了关于Java开发中volatile的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Netty分布式抽象编码器MessageToByteEncoder逻辑分析

    Netty分布式抽象编码器MessageToByteEncoder逻辑分析

    这篇文章主要介绍了Netty分布式抽象编码器MessageToByteEncoder的抽象逻辑分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03

最新评论