JVM调优原理篇

JVM调优

什么是JVM调优,调优的指标是什么?

JVM调优指的就是对当前系统进行性能调优,简单来说就是尽可能使用较小的内存和CPU来让JAVA程序获得更高的吞吐量及较低的延迟

调优常见的指标:

  1. 吞吐量:是指不考虑垃圾收集引起的停顿时间或内存消耗,应用达到的最高性能指标。
  2. 延迟:缩短由于垃圾收集引起的停顿时间或者完全消除因垃圾收集所引起的停顿,避免应用运行时发生抖动。
  3. 内存占用:垃圾收集器流畅运行所需要的内存数量。

何时需要去做JVM调优(为什么做)

总结下来:吞吐量低、延迟高、经常出现OOM等

  • Ful GC次数频繁,分配的内存不够
  • GC停顿时间过长
  • 应用出现OOM等内存异常
  • 系统吞吐量与响应性能不高或持续下降

一般的工程项目是不需要去调优的。从代码处考量优化

JVM调优的基本原则

JVM调优是一个手段,但不是一定所有问题都可以通过JVM进行调优解决

  • 大多数的Java应用不需要进行JVM优化
  • 大多数导致GC问题的原因是代码层面的问题导致的
  • 减少使用全局变量和大对象,减少创建对象的数量
  • 分析GC情况优化代码比JVM参数更好
  • 有限架构调优和代码调优,JVM优化优先级放到最低

JVM调优的目标

image-20250328222240732

堆内存的基本结构

在 JDK 7 版本及 JDK 7 版本之前,堆内存被通常分为下面三部分

  1. 新生代内存(Young Generation)
  2. 老生代(Old Generation)
  3. 永久代(Permanent Generation)

下图所示的 Eden 区、两个 Survivor 区 S0 和 S1 都属于新生代,中间一层属于老年代,最下面一层属于永久代

hotspot-heap-structure

(图片来自Java Guide)

JDK 8 版本之后 PermGen(永久) 已被 Metaspace(元空间) 取代,元空间使用的是直接内存

GC算法及常用的垃圾收集器

  • 对象存活分析?

引用计数法

  1. 给JAVA对象添加一个引用计数器
  2. 每当有一个地方引用它时,计数器+1,引用失效,则-1
  3. 当计数器不为0时,判断该对象存活;否则判断对象死亡

优点:实现简单,判断高效。

缺陷:无法解决对象间相互循环引用的问题,由于该算法存在判断漏洞,所以JAVA虚拟机没有采用该算法判断JAVA对象是否存活。

objA.name= objB;
objB.name= objA;

可达性分析算法

  1. 将一系列的GC Roots对象作为起点,从这些起点开始向下搜索
  2. 当一个对象到GC Root没有任何引用链相连时,则判断该对象不可达。

常见的可以作为GC Root对象的有

  • 虚拟机栈中引用的对象
  • 本地方法栈中JNI引用对象
  • 方法区中常量、类静态属性引用的对象

image-20250328223544578

常见的GC算法

标记-清除

image-20250328223912170

标记-复制算法

image-20250328224434562

缺点: 1. survive区域浪费,可能存在大量复制动作

标记-整理

image-20250328224641102

缺点: 效率不高

常见的垃圾回收器

年轻代垃圾收集器

  • Serial收集器
  • ParNew收集器

老年代垃圾收集器

  • Serial Old收集器
  • Parallel Old收集器
  • CMS收集器

不存在物理隔离分代

  • G1(横跨年轻代和老年代)

image-20250328224908727

更多见:Java Guide JVM篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/908354.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20241216 实验二《Python程序设计》实验报告

20241216 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2412 姓名: 曾楷 学号:20241216 实验教师:王志强 实验日期:2024年3月26日 必修/选修: 公选课 (一) 实验内容 1.设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善…

[Windows] TechSweeper 应用程序卸载神器V1.2.1

一.我们改进了程序元素显示,现在超出列宽,可以进行滚动显示二.我们为程序添加了右键菜单,现在功能更加全面三.现在程序出现崩溃时,可以进行错误提示与收集四.现在程序可以进行主题切换了五.添加了作者相关信息六.现在可以打开程序相关注册表了(直接显示 清晰明了)七.现在可…

鸢尾花书 - Book_3《数学要素》 - Chapter1 万物皆数

上面图片摘自原书 一、基础概念普及 1. 向量 若干数字排成一行或一列,并且用中括号括起来,得到的数组叫做向量。 2. 行向量 排成一行 3. 列向量 排成一列 4. 转置 行向量转置得到列向量,反之。 5. 矩阵 有行,有列,像表格。 6. 元素 x[i][j] 代表矩阵 X 中第 i 行第 j 列元…

VMware workstation 17 pro 设置开机自启虚拟机(Windows 11)

首先在软件界面设置需要启动的虚拟机 文件➡配置自动启动的虚拟机在打开的对话框中勾选需要自动启动的虚拟机和设置启动顺序点击确定即可。如果点击确定报错的话,如下图看起来问题可能出在两个方面:要么是vmAutoStart.xml文件不存在,要么是当前用户没有足够的权限去修改这个…

RabbitMQ进阶--集群,分布式事务

一.RabbitMQ集群搭建 RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方…

企业为何要使用odoo18

在当今快速变化的商业环境中,企业需要高效、灵活且经济实惠的管理工具来保持竞争力。Odoo 18 作为一款开源的企业资源计划(ERP)系统,凭借其全面的功能和独特的优势,成为众多企业的首选。为什么选择 Odoo 18? 1. 全面的功能覆盖 Odoo 18 集成了销售、采购、库存、制造、财…

deepclaude 的使用 直捣黄龙

先说结论,最简单的就是购买deepseek 和 claude 的api之后, 直接使用vscode中的cline插件,其中 cline的plan(计划模式)配置deepseek的api,act(执行模型)配置claude的api 直接上连接: deepseek开放平台 https://platform.deepseek.com/ claude 开放平台 https://con…

CentOS 7安装Docker

1.系统需求CentOS 7或更高版本。 centos-extras仓库必须处于启用状态,该仓库默认启用,但如果禁用了该仓库,请重新启用。 建议使用overlay2存储驱动。 2.使用Yum安装 2.1卸载老版本的Docker 在CentOS中,老版本Docker的软件包名是docker或docker-engine,而Docker CE的软件包…

GMap.NET + WPF:构建高性能 ADS-B 航空器追踪平台

ADS-B 简介ADS - B(Automatic Dependent Surveillance - Broadcast,广播式自动相关监视)是一种先进的航空监视技术。它依靠飞机上的机载设备,自动收集诸如飞机的位置、高度、速度、航向等关键数据,并周期性地以广播的形式向外发送这些信息。地面站和其他装有 ADS-B 接收设…

20241319 实验二《Python程序设计》实验报告

学号 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2413 姓名: 吴辰曦 学号:20241319 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 1.实验内容 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。 考核基…

GMap.NET + C#:构建高性能 ADS-B 航空器追踪平台

ADS - B 简介ADS - B(Automatic Dependent Surveillance - Broadcast,广播式自动相关监视)是一种先进的航空监视技术。它依靠飞机上的机载设备,自动收集诸如飞机的位置、高度、速度、航向等关键数据,并周期性地以广播的形式向外发送这些信息。地面站和其他装有 ADS - B 接…

20242112 2024-2025-2 《Python程序设计》实验报告

课程:《Python程序设计》 班级: 2421 姓名: 张童哲 学号:20242112 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 1.实验内容 1.1设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。 1.2考核基本语法、判定语句、循环语句、逻辑运算等知…