jvm 性能优化


jvm 性能优化

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

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

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

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

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

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

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

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

扫描二维码关注公众号,回复: 10989337 查看本文章

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

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垃圾收集器

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

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

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

常用参数

-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一般性能较高

发布了387 篇原创文章 · 获赞 98 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43931625/article/details/105274183
今日推荐