李锋镝的博客

  • 首页
  • 时间轴
  • 评论区显眼包🔥
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

JVM参数-XX:InitialRAMPercentage 和 -XX:MaxRAMPercentage解析

2025年4月11日 260点热度 0人点赞 0条评论

-XX:InitialRAMPercentage 和 -XX:MaxRAMPercentage 是 Java 虚拟机(JVM)的两个参数,用于基于系统可用物理内存的百分比来动态设置堆内存的初始大小和最大大小。

参数解释

  • -XX:InitialRAMPercentage:此参数用来设定 JVM 堆内存的初始大小,以系统可用物理内存的百分比来表示。例如 -XX:InitialRAMPercentage=60,意味着 JVM 启动时,堆内存的初始大小会被设置为系统可用物理内存的 60%。
  • -XX:MaxRAMPercentage:该参数用于设定 JVM 堆内存的最大大小,同样以系统可用物理内存的百分比来表示。例如 -XX:MaxRAMPercentage=85,表示 JVM 堆内存允许使用的最大大小为系统可用物理内存的 85%。

使用示例

在启动 Java 程序时,可以使用以下命令来设置这两个参数:

java -XX:InitialRAMPercentage=60 -XX:MaxRAMPercentage=85 YourMainClass

在上述命令中,YourMainClass 是运行的 Java 主类。

优势

  • 动态适应不同环境:在不同配置的服务器上运行 Java 应用程序时,无需手动为每个服务器调整堆内存的初始大小和最大大小。使用这两个参数,JVM 会根据系统的可用物理内存自动调整堆内存的大小,从而提高了应用程序的可移植性。
  • 避免手动配置错误:手动设置堆内存大小(如 -Xms 和 -Xmx)时,可能会因为对服务器内存情况了解不足而导致配置不合理。使用基于百分比的配置方式可以减少这种错误的发生。

注意事项

  • 系统资源预留:虽然可以将 MaxRAMPercentage 设置得较高,但要注意为系统和其他进程预留足够的内存,以免导致系统性能下降甚至出现内存不足的错误。
  • 兼容性:这两个参数从 Java 8u191 及更高版本开始支持,如果你使用的是较早的 Java 版本,可能无法使用这些参数。

通过合理设置 -XX:InitialRAMPercentage 和 -XX:MaxRAMPercentage 参数,可以让 JVM 更智能地管理堆内存,提高 Java 应用程序的性能和稳定性。

默认值

Java 8u191 及更高版本

从 Java 8u191 开始引入了这些参数,其默认值如下:

  • -XX:InitialRAMPercentage:默认值为 1.5625。这意味着 JVM 启动时,堆内存的初始大小会被设置为系统可用物理内存的 1.5625%。
  • -XX:MaxRAMPercentage:默认值为 25.0。即 JVM 堆内存允许使用的最大大小为系统可用物理内存的 25%。

Java 11 及更高版本

在 Java 11 及后续版本中,默认值同样是:

  • -XX:InitialRAMPercentage:1.5625
  • -XX:MaxRAMPercentage:25.0

你可以通过以下方式验证默认值,在启动 Java 程序时添加 -XX:+PrintFlagsFinal 参数,它会输出 JVM 的所有最终配置参数,然后从中查找这两个参数的值:

java -XX:+PrintFlagsFinal -version | grep InitialRAMPercentage
java -XX:+PrintFlagsFinal -version | grep MaxRAMPercentage

执行上述命令后,会显示类似如下的输出:

uintx InitialRAMPercentage                          = 1.5625                        {product}
uintx MaxRAMPercentage                              = 25.000000                      {product}

这就表明了当前 JVM 中这两个参数的实际值。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/article/4312

相关文章

  • 金融级JVM深度调优实战的经验和技巧
  • Java触发GC的方式
  • 解决Cannot connect to core dump or remote debug server. Use jhsdb jmap instead
  • 分代ZGC这么牛?底层原理是什么?
  • jmap命令(jdk1.8)
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA JVM
最后更新:2025年4月11日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

愿将腰下剑,直为斩楼兰。

那年今日(04月20日)

  • 1971年:中国著名法学家周鲠生逝世
  • 1901年:著名建筑学家梁思成出生于日本东京,祖籍广东新会
  • 1889年:德国纳粹党元首希特勒出生于奥地利布劳瑙
  • 1808年:法兰西第二帝国皇帝拿破仑出生
  • 429年:中国古代数学家祖冲之出生
  • 更多历史事件
最新 热点 随机
最新 热点 随机
Everything Claude Code 详细使用文档 配置Jackson使用字段而不是getter/setter来序列化和反序列化 这个域名注册整整十年了,十年时间,真快啊 Claude Code全维度实战指南:从入门到精通,解锁AI编程新范式 Apollo配置中心中的protalDB的作用是什么 org.apache.ibatis.plugin.Interceptor类详细介绍及使用
AI时代,个人技术博客的出路在哪里?使用WireGuard在Ubuntu 24.04系统搭建VPN这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了做了一个WordPress文章热力图插件
使用WireGuard在Ubuntu 24.04系统搭建VPN 为什么 Apache Doris 是比 Elasticsearch 更好的实时分析替代方案? 妹妹的画【2019.07.03】 jmap命令(jdk1.8) 我要狠狠的反驳“公司禁止使用 Lombok ”的观点! Java之五种遍历Map集合的方式
标签聚合
SpringBoot 多线程 分布式 AI docker 数据库 AI编程 ElasticSearch Redis Spring JVM 设计模式 WordPress IDEA SQL JAVA 架构 日常 MySQL K8s
友情链接
  • Blogs·CN
  • Honesty
  • Mr.Sun的博客
  • 临窗旋墨
  • 哥斯拉
  • 彬红茶日记
  • 志文工作室
  • 懋和道人
  • 拾趣博客导航
  • 搬砖日记
  • 旧时繁华
  • 林羽凡
  • 瓦匠个人小站
  • 皮皮社
  • 知向前端
  • 蜗牛工作室
  • 韩小韩博客
  • 风渡言

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

域名年龄

Theme Kratos Made By Dylan

津ICP备2024022503号-3

京公网安备11011502039375号