当前位置: 首页 > article >正文

Java 优化springboot jar 内存 年轻代和老年代的比例 减少垃圾清理耗时 如调整 -XX:NewRatio

-XX:NewRatio 是 Java Virtual Machine (JVM) 的一个选项,用于调整 年轻代(Young Generation)和 老年代(Old Generation)之间的内存比例。

1. 含义

XX:NewRatio=N 用于指定 老年代 与 年轻代 的内存比例。

N 的含义:

老年代内存占整个堆内存的比例为 (N / (N + 1))。
年轻代内存占整个堆内存的比例为 (1 / (N + 1))。

例如:

-XX:NewRatio=3:
老年代占堆内存的 3/4。
年轻代占堆内存的 1/4。

2. 默认值

HotSpot JVM 中,NewRatio 的默认值为 2:
老年代占堆内存的 2/3。
年轻代占堆内存的 1/3。

3. 使用场景

根据应用程序的内存分配需求,可以调整 NewRatio:

对象生命周期较长的应用(如服务器应用):
推荐使用较高的 NewRatio(如 3 或更高),将更多的堆内存分配给老年代。

对象生命周期较短的应用(如计算密集型应用):
推荐使用较低的 NewRatio(如 2 或更低),将更多的堆内存分配给年轻代。

4. 示例

启动参数设置

java -XX:NewRatio=3 -Xms512m -Xmx512m -jar myapp.jar

堆内存分布计算
假设堆大小为 512 MB 且 -XX:NewRatio=3:

年轻代:512 MB / (3 + 1) = 128 MB
老年代:512 MB - 128 MB = 384 MB

5. 注意事项

与其他 GC 选项的关系:

如果使用 G1 GC(-XX:+UseG1GC),NewRatio 可能不起作用,因为 G1 GC 会根据应用动态调整堆内存划分。

对象分配失败的影响:

如果年轻代内存分配太小,可能导致频繁的 Minor GC。
如果老年代内存分配太小,可能导致频繁的 Major GC 或 Full GC。
建议:

监控应用内存使用情况(通过工具如 jstat、VisualVM 或 Java Mission Control),根据实际需要调整。

6. 常见调优组合

初始堆大小和最大堆大小:

-Xms512m -Xmx1024m

年轻代内存固定大小(替代 NewRatio):

-XX:NewSize=128m -XX:MaxNewSize=128m

GC 日志分析:

-Xlog:gc*:gc.log

通过合理调整 NewRatio 和其他 JVM 参数,可以有效优化 Java 应用的内存使用和 GC 行为!


http://www.kler.cn/a/446818.html

相关文章:

  • 什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
  • java中带缓存的输入/输出流
  • react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由
  • 堆【Lecode_HOT100】
  • 【学习总结|DAY021】Java 多线程
  • @PostConstruct注解解释!!!!
  • 使用ResNet18进行猫狗分类(原始数据处理+训练流程)
  • Android Overlay Priority Rules
  • Oracle 数据库函数的用法(一)
  • Java-30 深入浅出 Spring - IoC 基础 启动IoC 纯XML启动 Bean、DI注入
  • [react]5、React脚手架
  • 【Linux】文件IO--open/close/文件描述符(详)
  • 【技术干货】移动SDK安全风险及应对策略
  • 【WPS安装】WPS编译错误总结:WPS编译失败+仅编译成功ungrib等
  • 在 Ubuntu 下通过 Docker 部署 MariaDB 服务器
  • 2024.12.18 周三
  • 对 MYSQL 架构的了解
  • PySide6如何使用自定义委托实现在TableWidget填充颜色
  • CTF 伪造ip的http请求头(学习记录)
  • sql server 查询对象的修改时间
  • 1. 深度学习介绍
  • winpcap抓包原理
  • 记忆组合数据知识
  • 基于LSTM和SSUN模型的高光谱遥感分类实现
  • PCL点云库入门——PCL库中点云数据拓扑关系之K-D树(KDtree)
  • 1、学习大模型总纲