jvm 性能调优


jvm 性能调优

 

 

**************************

项目调优:操作系统、项目架构、程序代码、数据库、jvm调优

 

操作系统优化:内存、cpu、存储设备等

项目架构优化:为应用程序设计一个合理的架构

程序代码优化:避免一次性加载太多的对象、不要用长生命周期变量引用短周期对象等

数据库优化:为项目设计合理的数据库、表结构

 

jvm 优化:垃圾收集器以及内存参数设置

说明:jvm 优化之前需要对项目架构、代码等进行优化,如果项目架构或者代码设计存在不足,调整jvm参数对应用的性能提升不大

 

 

**************************

jvm 调优评价指标:内存、吞吐量、延时

 

内存:程序正常运行所需要的内存

吞吐量:应用程序运行时间占总时间(应用程序运行时间+垃圾回收时间)的比值

延时:垃圾回收期间,应用程序的停顿时间

 

jvm 调优的目标是以较小的内存获得较大的吞吐量或者较低的延时,但这三个目标不可同时实现:

如果设置较大的内存,垃圾回收时就会花费较长的时间,造成较长的延时

如果设置较低的内存,就会触发频繁的垃圾回收,影响吞吐量

 

 

**********************

垃圾收集器:单线程、并行、并发,需要根据应用场景选择合适的垃圾收集器

 

***************

单线程垃圾收集器:serial(新生代)、serial old(老年代)

 

特点:垃圾回收时,用户线程停止工作,只有一条垃圾回收线程数

应用场景:适合桌面应用,回收的垃圾几十或者几百兆,垃圾回收造成的停顿时间较短

 

相关参数

-XX:+UseSerialGC:使用serial + serial old垃圾回收组合

 

***************

并行垃圾收集器:parallel scavenge(新生代)、parallel old(老年代)

 

特点:垃圾回收时,用户线程停止,可以有多条垃圾回收线程

应用场景:parallel scavenge是以吞吐量优先的垃圾收集器,提供了参数可以控制最大停顿时间、吞吐量

 

相关参数

-XX:+UseParallelGC:使用parallel scavenge + parallel old垃圾收集器组合

-XX:+UseParallelOldGC:使用 parallel scavenge + parallel old垃圾收集器组合,该参数java14开始禁用,未来可能移除

Java HotSpot(TM) 64-Bit Server VM warning: Option UseParallelOldGC was deprecated
 in version 14.0 and will likely be removed in a future release.

 

-XX:ParallelGCThreads:设置并发回收线程数

-XX:MaxGCPauseMillis:最大停顿毫秒数,若堆内存过大,垃圾回收时停顿时间可能会超过设置的值

-XX:GCTimeRatio:吞吐量,默认为99,及最大使用1%的时间回收垃圾

-XX:+UseAdaptiveSizePolicy:自动调整新生代大小(-Xmn)、eden与survivor比例(-XX:SurvivorRatio)等参数

 

***************

并发垃圾收集器:G1(新生代、老年代)

 

特点:垃圾回收时,用户线程可以工作,只有短暂停顿,可以有多条垃圾回收线程

应用场景:适用于低停顿的场景,与parallel scavenge + parallel old组合相比,G1的停顿时间更可控

 

相关参数

-XX:+UseG1GC:使用G1垃圾收集器

-XX:+ZGC:使用ZGC垃圾收集器

 

 

**********************

内存参数设置:一般情况下,使用默认的参数就可以满足性能要求

 

***************

常用参数

 

-Xms:设置堆的最小值

-Xmx:设置堆的最大值

 

-XX:NewSize:设置新生代最小值

-XX:MaxNewSize:设置新生代最大值

-Xmn:设置新生代大小,等同于将NewSize、MaxNewSize设置为同一个值

 

-XX:NewRatio:设置新生代、老年代的比值,默认为2(新生代:老年代=1:2)

-XX:SurvivorRatio:设置eden、survivor的比值,默认为8(eden:survivor=8:1)

 

***************

优化措施

 

设置合理的初始堆大小,将堆的最大最小值设置为相同,防止堆内存伸缩影响性能;

调整老年代内存大小,避免频繁触发full gc;

调整新生代内存大小,避免频繁触发新生代gc,导致大量对象进入老年代;

使用并行或者并发垃圾收集器进行垃圾收集

考虑使用高版本的jdk,稳定发布的高版本jdk一般性能较高

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值