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

【JVM-GC调优】

一、预备知识

  • 掌握GC相关的VM参数,会基本的空间调整
  • 掌握相关工具
  • 明白一点:调优跟应用、环境有关,没有放之四海而皆准的法则

二、调优领域

  • 内存
  • 锁竞争
  • cpu占用
  • io

三、确定目标

  • 【低延迟】:CMS、G1(低延迟、高吞吐)、ZGC(jdk12体验) 垃圾回收器
  • 【高吞吐量】:ParallelGC 垃圾回收器

四、FullGC前后的内存占用,考虑下面几个问题

  • 数据是不是太多?
    • resultSet = statement.sexecuteQuery(“select * from 大表”); 大量数据加载到堆内存,扛不住
  • 数据表示是否臃肿?
    • 对象图:查询时只查用到的字段
    • 对象大小:new Object() 都要占16个字节。Integer 24 int 4,如果内存占用过多,可以考虑从一些对象上进行瘦身,能用基本类型的就不用包装类型
  • 是否存在内存泄漏?
    • static Map map = ,静态的Map,不断向里面put数据,有可能导致溢出
    • 可以加上软、弱引用,
    • 缓存可以使用第三方缓存实现,尽量不要使用static Map map

五、新生代调优

  • 新生代特点
  1. 所有的new操作的内存分配非常廉价。
  2. 死亡对象的回收代价是零
  3. 大部分对象用过即死
  4. Minor GC的时间远远低于Full GC
  • 新生代越大越好吗?
    • 新生代空间大了,老年代空间就小了。很容易触发Full GC,暂停时间要比Minor GC暂停时间要长。
    • 新生代空间建议在四分之一以上二分之一以下
  • 晋升阈值配置得当,让长时间存活对象尽快晋升
    在这里插入图片描述

六、老年代调优

以CMS为例

  • CMS的老年代内存越大越好
  • 先尝试不做调优,如果没有Full GC那么已经很优了,否则先尝试调优新生代
  • 观察发生Full GC时老年代内存占用,将老年代内存预设调大1/4~1/3
    • -XX:CMSInitiatingOccupancyFraction=percent

七、案例

  1. Full GC和Minor GC频繁
  • 分析:说明空间紧张,如果是新生代空间紧张,当我们业务高峰期来了,大量对象被创建,很快新生代空间塞满了(幸存区空间紧张了),对象的晋升阈值就会降低,本来生存周期很短的对象,会被晋升到老年代中,进一步出发老年代垃圾回收导致Full GC频繁发生。
  • 解决:通过检查工具检查堆空间大小,确实发现新生代空间太小了,试着增大新生代内存(增加幸存区空间,增大晋升阈值),这样使一些生命周期较短的对象尽可能留在新生代,而不进入老年代,进而减少了老年代Full GC的发生
  1. 请求高峰期发生Full GC,单次暂停时间特别长(CMS)
  • 分析:到底是哪部分暂停时间特别长,查看GC日志,初始标记和并发标记都是比较快的,耗时的时重新标记(CMS在重新标记的时候会扫描整个的堆内存:需要扫描老年代和新生代内存),由于高峰期,新生代可能存在大量对象,导致重新标记会很慢。
  • 解决:在重新标记之前,可以先对新生代做一次垃圾回收,减少新生代对象数量,再次重新标记的时候,速度就快了
    在这里插入图片描述
  1. 老年代充裕情况下,发生Full GC(CMS jdk1.7)
  • 分析:导致Full GC的原因:1.空间不足,导致并发失败。2.空间碎片比较多。从CG日志看没有并发失败或者碎片过多导致的提示。说明老年代内存充裕。那就应该是jdk版本问题,1.7及以前版本,永久带空间不足,就会导致整个堆的一次Full GC出现,1.8及之后,改成了元空间(操作系统的内存空间),
  • 解决:增加永久带的内存空间

相关文章:

【JVM-GC调优】

一、预备知识 掌握GC相关的VM参数,会基本的空间调整掌握相关工具明白一点:调优跟应用、环境有关,没有放之四海而皆准的法则 二、调优领域 内存锁竞争cpu占用io 三、确定目标 【低延迟】:CMS、G1(低延迟、高吞吐&a…...

shopping mall(document)

shopping mall(document) 商城的原型,学习,优化,如何比别人做的更好,更加符合大众的习惯 抄别人会陷入一个怪圈,就是已经习惯了,也懒了,也不带思考了。 许多产品会迫于…...

qiankun微前端任意位置子应用

qiankun微前端任意位置子应用 主项目1、安装qiankun2、引入注册3、路由创建4、路由守卫 二、子项目1、安装sh-winter/vite-plugin-qiankun2、main.js配置3、vite.config.js配置 三、问题解决 主项目 1、安装qiankun npm i qiankun -S2、引入注册 创建存放子应用页面 //whpv…...

【LeetCode Solutions】LeetCode 176 ~ 180 题解

CONTENTS LeetCode 176. 第二高的薪水(SQL 中等)LeetCode 177. 第 N 高的薪水(SQL 中等)LeetCode 178. 分数排名(SQL 中等)LeetCode 179. 最大数(中等)LeetCode 180. 连续出现的数字…...

前端面试每日三题 - Day 29

这是我为准备前端/全栈开发工程师面试整理的第29天每日三题练习: ✅ 题目1:Web Components技术全景解析 核心三要素 Custom Elements(自定义元素) class MyButton extends HTMLElement {constructor() {super();this.attachShado…...

第十五章,SSL VPN

前言 IPSec 和 SSL 对比 IPSec远程接入场景---client提前安装软件,存在一定的兼容性问题 IPSec协议只能够对感兴趣的流量进行加密保护,意味着接入用户需要不停的调整策略,来适应IPSec隧道 IPSec协议对用户访问权限颗粒度划分的不够详细&…...

spring5.x讲解介绍

Spring 5.x 是 Spring Framework 的重要版本升级,全面拥抱现代 Java 技术栈,其核心改进涵盖响应式编程、Java 8支持、性能优化及开发模式创新。以下从特性、架构和应用场景三个维度详细解析: 一、核心特性与架构改进 Java 8 全面支持 Spring …...

荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)

作者:曾在 WebSocket 超时里泡了七天七夜的苦命人 一、控制端总体架构概述 荣耀A8控制端主要承担的是“运营支点”功能,也就是开发与运营之间的桥梁。它既不直接参与玩家行为,又控制着玩家的行为逻辑和游戏规则触发机制。控制端的主要职责包…...

levelDB的数据查看(非常详细)

起因:.net大作业天气预报程序(WPF)答辩时,老师问怎么维持数据持久性的,启动时加载的数据存在哪里,我明白老师想考的应该是json文件的解析(正反),半天没答上来存那个文件了(老师默认这个文件是自…...

在Fiddler中添加自定义HTTP方法列并高亮显示

在Fiddler中添加自定义HTTP方法列并高亮显示 Fiddler 是一款强大的 Web 调试代理工具,允许开发者检查和操作 HTTP 流量。一个常见需求是自定义 Web Sessions 列表,添加显示 HTTP 方法(GET、POST 等)的列,并通过颜色区…...

基于公共卫生大数据收集与智能整合AI平台构建测试:从概念到实践

随着医疗健康数据的爆发式增长,如何有效整合、分析和利用这些数据已成为公共卫生领域的重要挑战。传统方法往往难以应对数据的复杂性、多样性和海量性,而人工智能技术的迅猛发展为解决这些挑战提供了新的可能性。基于数据整合与公共卫生大数据的AI平台旨在构建一个全面的生态…...

clahe算法基本实现

一、背景介绍 图像算法处理中,经常需要遇到图像对比度调整的情况,CLAHE(Contrast Limited Adaptive Histogram Equalization)则是一种基于直方图,使用非常普遍的图像对比度调整算法。 关于这个算法的介绍有很多,基本原理这些&…...

python打卡day20

特征降维------特征组合(以SVD为例) 知识点回顾: 奇异值的应用: 特征降维:对高维数据减小计算量、可视化数据重构:比如重构信号、重构图像(可以实现有损压缩,k 越小压缩率越高&#…...

如何使用极狐GitLab 软件包仓库功能托管 ruby?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 Ruby gems (BASIC ALL) WARNING:Ruby gems 软件包库正在开发中,由于功能有限,尚未准备好…...

数字化转型-4A架构之数据架构

系列文章 数字化转型-4A架构(业务架构、应用架构、数据架构、技术架构) 数字化转型-4A架构之业务架构 数字化转型-4A架构之应用架构 数据架构 Data Architecture(DA) 1. 定义 数据架构,是组织管理数据资产的科学之…...

React 第三十七节 Router 中 useOutlet Hook的使用介绍以及注意事项

React Router 中的 useOutlet 是 v6 版本新增的 Hook&#xff0c;用于在父路由组件中访问当前嵌套的子路由元素。它提供了比 <Outlet> 组件更灵活的控制方式&#xff0c;适合需要根据子路由状态进行动态处理的场景。 一、useOutlet的基本用法 import { useOutlet } fro…...

u-boot学习笔记(四)

文章目录 cmd/sub_cmd/exit.cdo_exit()exit.c可提供的命令及使用方式&#xff1a; ext2.cdo_ext2ls()do_ext2load()ext2.c可提供的命令及使用方式&#xff1a; ext4.cdo_ext4_size()do_ext4_load()do_ext4_ls()do_ext4_write()ext4.c可提供的命令及使用方式&#xff1a; fastbo…...

使用React实现调起系统相机功能

前言&#xff1a; 最近在公司推荐研发任务时实现了拍照识别功能&#xff0c;需要调起系统相机&#xff0c;笔者实现之后&#xff0c;将实现的流程分享给各位小伙伴 功能描述&#xff1a; 点击相机icon调起系统相机&#xff0c;同时可以选择是拍摄还是使用相册图片&#xff0…...

结构性变革与新兴机遇

近年来&#xff0c;全球就业市场正经历深刻的结构性变革。受技术进步、产业升级、人口结构变化及全球经济格局调整的影响&#xff0c;传统就业模式被重塑&#xff0c;新的职业机会不断涌现。本文将分析当前就业市场的主要趋势&#xff0c;并探讨其对劳动者、企业和政策制定者的…...

AGV通信第3期|AGV集群智能应急响应系统:从故障感知到快速恢复

随着智慧工厂物流系统复杂度的提升&#xff0c;AGV运行过程中的异常处理能力已成为保障生产连续性的关键指标。面对突发障碍、设备故障等意外状况&#xff0c;传统依赖人工干预的响应模式已无法满足现代智能制造对时效性的严苛要求。 一、AGV异常应急体系面临的挑战 响应时效瓶…...

军事目标无人机视角坦克检测数据集VOC+YOLO格式4003张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4003 标注数量(xml文件个数)&#xff1a;4003 标注数量(txt文件个数)&#xff1a;4003 …...

2025年5月AI科技领域周报(4.28-5.4):大模型商用加速落地 边缘AI开启全域智能新图景

2025年5月AI科技领域周报&#xff08;4.28-5.4&#xff09;&#xff1a;大模型商用加速落地 边缘AI开启全域智能新图景 一、本周热点回顾1. OpenAI发布GPT-5多模态大模型 开启通用人工智能新纪元2. 谷歌发布安卓15系统 全面集成Gemini大模型重构移动生态3. 百度Apollo发布第六代…...

Flutter 3.29.3 花屏问题记录

文章目录 Flutter 3.29.3 花屏问题记录问题记录解决尝试解决 Flutter 3.29.3 花屏问题记录 问题记录 flutter版本3.29.3&#xff0c;代码大致为&#xff1a; ShaderMask(shaderCallback: (Rect bounds) {return LinearGradient(begin: Alignment.topCenter,end: Alignment.bo…...

【Pandas】pandas DataFrame all

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 True pandas.DataFrame.all() pandas.DataFrame.all() 方…...

软件安全(二)优化shellcode

我们在上一节课中所写的shellcode&#xff0c;其中使用到的相关的API是通过写入其内存地址来实现调用。这种方法具有局限性&#xff0c;如切换其他的操作系统API的内存地址就会发生变化&#xff0c;从而无法正常调用。 所谓的shellcode不过是在目标程序中加一个区段使得程序可…...

RabbitMQ-运维

文章目录 前言运维-集群介绍多机多节点单机多节点 多机多节点下载配置hosts⽂件配置Erlang Cookie启动节点构建集群查看集群状态 单机多节点安装启动两个节点再启动两个节点验证RabbitMQ启动成功搭建集群把rabbit2, rabbit3添加到集群 宕机演示仲裁队列介绍raft算法协议 raft基…...

深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)

博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒​&#x1f338;​ 博客主页&#xff1a;羊小猪~~-CSDN博客 内容简介&#xff1a;常见目标检测算法简介​&#x1f…...

【Python 元组】

Python 中的元组&#xff08;Tuple&#xff09;是一种不可变的有序数据集合&#xff0c;用于存储多个元素的序列。与列表&#xff08;List&#xff09;类似&#xff0c;但元组一旦创建后无法修改&#xff0c;这种特性使其在特定场景下具有独特优势。 一、核心特性 不可变性&am…...

LINUX CFS算法解析

文章目录 1. Linux调度器的发展历程2. CFS设计思想3. CFS核心数据结构3.1 调度实体(sched_entity)3.2 CFS运行队列(cfs_rq)3.3 任务结构体中的调度相关字段 4. 优先级与权重4.1 优先级范围4.2 权重映射表 (prio_to_weight[])优先级计算4.3.1. static_prio (静态优先级)4.3.2. n…...

智能指针笔记

智能指针&#xff0c;利用class类对象销毁的时候自动调用析构函数&#xff0c;去把delete ptr的操作放在析构函数里&#xff0c;去实现自动释放指针里的资源 RAII是ResourceAcquisition Is Initialization的缩写&#xff0c;他是⼀种管理资源的类的设计思想&#xff0c;本质是 …...