当前位置: 首页 > news >正文

JVM 调优

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~

JVM调优是一项重要的任务,可以提高Java应用程序的性能和稳定性。掌握JVM调优需要深入了解JVM的工作原理、参数和配置选项,以及历史JVM参数的调整和优化方法。

1

了解吞吐量和停顿时间

4f8b0533afb6cefbc825a5b8c1e65bc6.png

1、吞吐量

吞吐量=运行用户代码的时间/(运行用户代码的时间+垃圾收集时间)。

比如虚拟机总共运行了100分钟,垃圾收集时间用了1分钟,吞吐量=(100-1)/100=99%。

吞吐量越大,意味着垃圾收集的时间越短,意味着用户代码可以充分利用CPU资源,尽快完成程序的运算任务。主要适合在后台运算而不需要太多交互的任务。

-XX:MaxGCPauseMillis:设置最大的垃圾收集停顿时间

-XX:GCTimeRatio:设置吞吐量的大小

2、停顿时间

停顿时间 STW(Stop The World)=垃圾收集器进行垃圾回收时中断用户请求执行响应的时间。

停顿时间越短就越适合需要和用户交互的程序,良好的响应速度能提升用户体验,越优秀的垃圾收集器,它的停顿时间一定越短,这也是所有垃圾收集器共同追求的目标。

吞吐量和停顿时间这两个指标也是评价垃圾收集器好坏的标准,其实 JVM 调优也就是在观察这两个指标,通过设置不同的参数来提升吞吐量和降低停顿时间。

2

JVM 调优维度

977e891866e71ffaa6cc3c127472223c.png

1、内存使用的维度:对堆的分析,也就是解决我们经常遇到的 OOM 问题,排查哪个对象占用的内存空间大

2、GC 的维度:也就是通过查看垃圾回收的日志文件,分析停顿时间和吞吐量这 2 个指标,通过选择不同的垃圾收集器,观察吞吐量和停顿时间来进行调优。

3、当 CPU使用率高,内存空间不足,GC 次数太多时,需要对 JVM 进行调优,调优的目标就是尽可能提高吞吐量,降低停顿时间。

以下是一些掌握JVM调优的建议:

1、分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点。

2、确定JVM调优量化目标,例如降低停顿时间、减少内存占用等。

3、熟悉JVM的参数和配置选项,例如堆内存大小、垃圾回收算法等。

4、根据历史JVM参数来调整参数,例如-Xmx和-Xms等。

5、调整垃圾回收算法和内存分配,例如使用G1垃圾回收器、调整新生代和老年代的比例等。

6、检查系统中的内存热点和CPU热点,辅助代码优化。

7、分析结果,判断是否需要优化,将转移到老年代的对象数量降低到最小。

8、不断的监控、分析和调整,直至找到优化的平衡点。

9、熟悉JVM的不稳定参数,例如-XX参数,并学会如何调整它们来提高性能和稳定性。

10、阅读JVM调优的相关文档和书籍,了解更多的知识和技巧。

通过不断的实践和总结,可以逐步提高调优技能,让Java应用程序运行得更高效、更稳定。

后面将为大家介绍 JVM 调优命令。

http://www.lryc.cn/news/111124.html

相关文章:

  • DP-GAN剩余代码
  • 在word的文本框内使用Endnote引用文献,如何保证引文编号按照上下文排序
  • SpringBoot项目上传至服务器
  • C++中实现多线程的三种方式
  • 程序员副业指南:怎样实现年入10w+的目标?
  • excel 计算 分位值
  • mongodb-windows-x86_64-4.4.23-signed.msi
  • 一个SpringBoot 项目能处理多少请求?
  • Shell编程基础(十)读取多行文本到数组 写入多行文本到文件
  • MyBatis学习笔记2
  • spring总结
  • 记录--说一说css的font-size: 0
  • Matlab实现支持向量机算法(附上多个完整仿真源码)
  • AIGC大模型ChatGLM2-6B:国产版chatgpt本地部署及体验
  • [国产MCU]-BL602开发实例-开发环境搭建
  • 春秋云镜 CVE-2020-26048
  • 使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——简单应用
  • 一个.NET开发的Web版Redis管理工具
  • javaAPI(四):jdk8中的日期时间API
  • 解决在mybatis中出现的org.apache.ibatis.exceptions.PersistenceException~
  • Vue + ElementUI 实现可编辑表格及校验
  • 中介者模式——协调多个对象之间的交互
  • 启动Flink显示初始化状态怎么解决?
  • VB+SQL采购管理系统设计与实现
  • TBB库中实现协程(coroutine)的源码说明
  • 【CSS弹性盒模型 display:flex;常用参数及常见的布局】
  • golang函数传参——值传递理解
  • Liunx环境下git的详细使用(gitee版)
  • exoplayer的使用-2,与flutter相互通信
  • 【基础类】—类型转换