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区空间不够时,便会提前进入到老年代中,但这个次数一定不大于设置的最大阈值。
1.2 内存调优
  可以根据业务场景,挑战yang:old 区的比例。比如秒杀。默认 old:yang = 2:1 如果公司内存紧张,可以短暂调到 1:2.

 

 

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

 

 

posted @   好记性不如烂笔头=>  阅读(219)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示