Java JVM(Java虚拟机)启动参数的设置方式

 更新时间:2026年06月17日 14:45:29   作者:编译人生  
这段描述主要介绍了JavaJVM启动参数设置,涵盖标准参数、非标准参数(-X)和非Stable参数(-XX)等并详细解释了常用参数如-Xms、-XX:MaxPermSize等等-XX:NewRatio等等等,帮助优化Java应用程序性能

Java JVM(Java虚拟机)启动参数的设置对于优化Java应用程序的性能至关重要。

这些参数可以分为标准参数、非标准参数(也称为-X参数)和非Stable参数(以-XX为前缀)。

以下是一些常用的JVM启动参数设置:

一、标准参数

-verbose:gc

  • 输出虚拟机中垃圾收集(GC)的详细情况。

-verbose:class

  • 输出JVM载入类的相关信息,当JVM报告找不到类或类冲突时,可用于诊断。

二、非标准参数(-X)

-Xms<size>

  • 设置JVM启动时的初始堆内存大小。
  • 例如,-Xms512m表示设置JVM堆内存初始值为512MB。

-Xmx<size>

  • 设置JVM可使用的最大堆内存大小。
  • 例如,-Xmx1024m表示设置JVM堆内存最大可用内存为1024MB。为了避免JVM内存自动扩展,建议将-Xmx和-Xms设置为相同的值。

-Xmn<size>

  • 设置年轻代(Young Generation)的大小。
  • 例如,-Xmn200m表示设置年轻代大小为200MB。年轻代用于存放新生成的对象,其大小对系统性能有较大影响。

-Xss<size>

  • 设置每个线程的堆栈大小。
  • 例如,-Xss128k表示设置每个线程的堆栈大小为128KB。根据应用的线程所需内存大小进行调整。

三、非Stable参数(-XX)

-XX:+UseSerialGC

  • 启用串行垃圾收集器。
  • 这是JVM的默认GC方式,一般适用于小型应用和单处理器。

-XX:+UseParallelGC

  • 启用并行垃圾收集器。
  • 并行GC在GC运行时,对应用程序运行没有影响,可以最大限度不影响app的运行。

-XX:+UseConcMarkSweepGC

  • 启用并发标记交换算法进行GC。
  • 适用于多处理器系统,可以提高GC的效率,但算法复杂,系统消耗较大。

-XX:NewRatio=<int>

  • 设置年轻代(Young Generation)与老年代(Old Generation)的比例。
  • 例如,-XX:NewRatio=3表示年轻代与老年代的比例为1:3。

-XX:SurvivorRatio=<int>

  • 设置Eden区与Survivor区的大小比例。
  • 例如,-XX:SurvivorRatio=8表示Eden区与Survivor区的比例为8:1。

-XX:MaxPermSize=<size>

  • 设置永久代(PermGen space,在Java 8中已被元空间Metaspace替代)的最大值。
  • 例如,-XX:MaxPermSize=256m。但请注意,在Java 8及更高版本中,应使用-XX:MaxMetaspaceSize来设置元空间的最大值。

-XX:+HeapDumpOnOutOfMemoryError

  • 当堆内存空间溢出时,输出堆的内存快照。

-XX:HeapDumpPath=<path>

  • 指定堆内存快照的输出路径。

-XX:+PrintGC

  • 每次GC时打印相关信息。

-XX:+PrintGCDetails

  • 每次GC时打印详细信息,包括各个区的情况。

-Xloggc:<file-path>

  • 指定GC日志的输出路径。
  • 例如,-Xloggc:/data/logs/gc.log

-XX:NumberOfGCLogFiles=<int>

  • 设置GC日志文件的滚动个数。

-XX:GCLogFileSize=<size>

  • 设置每个GC日志文件的大小。

四、其他常用参数

-D<name>=<value>

  • 设置系统属性。
  • 例如,-Dspring.profiles.active=prd用于设置Spring框架的活动配置文件。

-server

  • 设置JVM使用server模式。
  • 该模式下,JVM的启动速度较慢,但运行时性能和内存管理效率更高,适用于生产环境。

-Xbootclasspath:<path>

  • 指定JVM加载但不想通过校验的类路径。

-Xdebug

  • JVM调试参数,用于调试。
  • 例如,在Tomcat中设置远程调试时,可以使用-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

请注意:

不同的JVM实现(如Oracle JDK、OpenJDK等)可能对某些参数的支持有所不同,且随着JVM版本的更新,某些参数可能会被弃用或引入新的参数。因此,在设置JVM参数时,建议查阅当前JVM版本的官方文档以获取最准确的信息。

五、总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot 加载 META-INF/spring.factories方式

    springboot 加载 META-INF/spring.factories方式

    这篇文章主要介绍了springboot 加载 META-INF/spring.factories方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java多态中的就近原则介绍

    java多态中的就近原则介绍

    大家好,本篇文章主要讲的是java多态中的就近原则介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • springboot整合knife4j全过程

    springboot整合knife4j全过程

    这篇文章主要介绍了springboot整合knife4j全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Mybatis Plus LambdaQueryWrapper的具体用法

    Mybatis Plus LambdaQueryWrapper的具体用法

    Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了SQL注入的风险,感兴趣的可以了解一下
    2023-11-11
  • spring中@RestController和@Controller的区别小结

    spring中@RestController和@Controller的区别小结

    @RestController和@Controller这两个注解用于创建Web应用程序的控制器类,那么这两个注解有哪些区别,本文就来介绍一下,并用示例代码说明,感兴趣的可以了解一下
    2023-09-09
  • spring cloud eureka注册原理-注册失败填坑笔记

    spring cloud eureka注册原理-注册失败填坑笔记

    这篇文章主要介绍了spring cloud eureka注册原理-注册失败填坑笔记,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Java导出Execl疑难点处理的实现

    Java导出Execl疑难点处理的实现

    这篇文章主要介绍了Java导出Execl疑难点处理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Eclipse中maven异常Updating Maven Project的统一解决方案

    Eclipse中maven异常Updating Maven Project的统一解决方案

    今天小编就为大家分享一篇关于Eclipse中maven异常Updating Maven Project的统一解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Springboot使用RabbitMq延迟队列和死信队列详解

    Springboot使用RabbitMq延迟队列和死信队列详解

    文章介绍了在项目中实现文件分片上传功能时遇到的问题,以及使用Quartz定时器、Redis定时器和RabbitMQ延迟队列和死信队列三种方法来解决定时任务和删除临时桶的问题,文章详细描述了RabbitMQ延迟队列的配置和使用,包括延迟时间、死信交换机和监听器的设置
    2025-10-10
  • Java变量命名规则详解及常见命名错误(建议收藏)

    Java变量命名规则详解及常见命名错误(建议收藏)

    这篇文章主要介绍了Java中变量命名的规则及最佳实践,包括有效字符、大小写敏感性、不能使用保留字、驼峰命名法、描述性命名、特定类型的命名习惯、避免潜在问题、常见命名错误及如何避免等内容,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02

最新评论