JVM性能优化
JVM的性能优化可以分为代码层面和非代码层面。
在代码层面,大家可以结合字节码指令进行优化,
1、比如一个循环语句,可以将循环不相关的代码提取到循环体之外,这样在字节码层面就不需要重复执行这些代码了。
2、finally 中级的关闭资源
3、 适用集合框架的时候指定长度,防止他不够的时候,扩容,导致资源浪费。
在非代码层面,一般情况可以从参数、内存、GC以及cpu占用率等方面进行优化。
注意,JVM调优是一个漫长和复杂的过程,而在很多情况下,JVM是不需要优化的,因为JVM本身已经做了很多的内部优化操作,大家千万不要为了调优和调优。
1.1 参数优化
1 2 | ( 1 )‐XX:MaxTenuringThreshold 2 ( 2 )‐XX:PretenureSizeThreshold 5 超过多大的对象直接在老年代分配,避免在新生代的Eden和S区不断复制 67 ( 3 )‐XX:+/‐ UseAdaptiveSizePolicy 8 <br>会动态调整 Eden、Survivor 的大小,有些情况存在Survivor 被自动调为很小,比如十几MB甚至几MB的可能,这个时候YGC回收掉 Eden区后,还存活的对象进入Survivor 装不下,<br>就会直接晋升到老年代,导致老年代占用空间逐渐增加,从而触发FULL GC,如果一次FULL GC的耗时很长(比如到达几百毫秒),那么在要求高响应的系统就是不可取的。( 4 )‐XX:SurvivorRatio 11 默认值为 8 <br>它定义了新生代中Eden区域和Survivor区域(From幸存区或To幸存区)的比例,默认为 8 ,也就是说Eden占新生代的 8 / 10 ,From幸存区和To幸存区各占新生代的 1 / 10 |
该参数主要是控制新生代需要经历多少次GC晋升到老年代中的最大阈值。在JVM中用4个bit存储(放在对象头中),所以其最大值是15。
但并非意味着,对象必须要经历15次YGC才会晋升到老年代中。例如,当survivor区空间不够时,便会提前进入到老年代中,但这个次数一定不大于设置的最大阈值。
但并非意味着,对象必须要经历15次YGC才会晋升到老年代中。例如,当survivor区空间不够时,便会提前进入到老年代中,但这个次数一定不大于设置的最大阈值。
1.2 内存调优
可以根据业务场景,挑战yang:old 区的比例。比如秒杀。默认 old:yang = 2:1 如果公司内存紧张,可以短暂调到 1:2.

1.3 GC调优
根据不同GC垃圾收集器的特性。为不同的区域选择为不同GC垃圾收集器。
1.8JVM性能优化指南

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!