一、jvm默认设置参数
- 声明:基本的设置参数可以如下,但是你得根据你的实际业务场景进行调整
-Xms128m
-Xmx2043m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
二、jvm调优参数解释
- jvm堆的设置,一般将-Xms -Xmx限定为其最小值与最大值,为了防止垃圾回收器在最小、最大之间收缩而产生额外的时间,通常把最大、最小设置为相同的值
- 年轻代和年老代将根据默认的比例(1:2)分配内存,也可以通过调整二者之间的比率NewRadio来调整其二者之间的大小,为了防止年轻代的堆收缩,一般会将 XX:newSize -XX:MaxNewSize 设置为同样大小
- 年轻代与年老代
(1)更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的Full GC。
(2)更小的年轻代必然导致更大的年老代,更小的年轻代会导致GC更加频繁,但会减少GC的时间,大的年老代会减少Full GC 的频率。
- 分析:根据具体的业务场景以及对象生命周期的分布情况:如果存在大量临时对象,应该选择更大年轻代;如果存在相对较多持久对象,年老代应该适量增大。
- 具体依据:
(1) 本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2
(2) 观察应用一段时间,看其他的峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,
比如可以把比例控制在1:1,但需应该给年老代至少预留1/3的增长空间
- 在配置较好的机器上(比如多核,大内存),可以为年老代选择收集算法:-XX:+UseParallelOldGc
- 线程堆栈的设置:每个线程默认开启1M堆栈,用于存放栈帧、调用参数、局部变量等,一般这个默认值较大,256k就够了
理论上,在内存不变的情况下,减少每个线程的堆栈,可以产生更多的线程,这受限于操作系统。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)