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

JVM——堆内存调优(Jprofiler使用)Jprofile下载和安装很容易,故没有记录,如有需要,在评论区留言)

堆内存调优

当遇到OOM时,可以进行调参

1、尝试扩大堆内存看结果

2、分析内存,看哪个地方出现了问题(专业工具)

调整初始分配内存为1024M,调整最大分配内存为1024M,打印GC细节(如何添加JVM操作往下看)

-Xms1024m -Xmx1024m -XX:+PrintFGCDetails

在一个项目中,突然出现了OOM故障,那么该如何排除,研究为什么出错

  • 能够看到代码第几行出错:内存快照分析工具,MAT,Jprofiler
  • Dubug,一行行分析代码

MAT,Jprofiler作用:

  • 分析Dump内存文件,快速定位内存泄露;
  • 获得堆中的数据
  • 获得大的对象

下面是一个使用Jprofile查OOM来源的示例

(已经下载好了Jprofile以及Idea插件)

首先写一个必定会OOM的代码:

import java.util.ArrayList;public class Demo {byte[] array = new byte[1*1024*1024];//1mpublic static void main(String[] args) {ArrayList<Demo> list = new ArrayList<>();int count = 0;try{while(true){list.add(new Demo());count = count + 1;}}catch (Exception e){}}
}

该问题会虽然用try-catch尝试捕获异常,但问题是,OOM是Error,而非Exception,因此无法排查错误。

首先:

在这里插入图片描述

我们需要添加一些JVM的操作,以至于我们可以在程序运行后在终端查询到JVM的反馈

1、添加JVM操作

在这里插入图片描述

2、添加JVM操作栏(该IDE版本为2023版,因此许多UI做出了修改,与狂神说的UI不同)

在这里插入图片描述

3、在VM option内写下: -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError意思为:限制初始化堆内存大小为1M,最大堆内存为8M,Dump出OOM

在这里插入图片描述

接下来运行程序,终端会给出JVM信息,下列信息中,第一行表示出现OOM,位置在HeapSpace,即堆空间。第二行表示已经将堆dump出一个.hprof文件,名字为java_pid44260,你可以在文件夹中找到它,也可以直接在project中找到它

在这里插入图片描述

可以发现,除了java_pin44260.hprof文件外,还dump出了一个文件夹,这个文件夹中包含了大量信息,十分占用空间,如果排查完错误,记得删除。

在这里插入图片描述

点开java_pin44260.hprof,如果安装好Jprofile,则会直接跳转到Jprofile,这里可以看到各类占用的空间大小

在这里插入图片描述

跳到Biggest Objects,可以看到,大部分的内存都是由ArrayList构成的,且可以看到它的类型为byte[],现在我们里真相很近了!

在这里插入图片描述

点击Thread Dump,查看线程Dump,因为示例中并没有开多线程,因此问题大概率是出现在main线程中,天使线程大概率是不会出现问题的,所以直接查main,我们可以发现,main线程中发现了OOM,且给出了具体位置具体行数,

在这里插入图片描述

点进去,即可直接跳转到相应位置,我们发现,它直接跳到Demo.java中,光标停留在main方法上,说明问题在此,并且Jprofile给出了具体行数,17行,因此我们就可以锁定问题所在了,就在这!

import java.util.ArrayList;// Dump文件
public class Demo {// -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryErrorbyte[] array = new byte[1*1024*1024];//1mpublic static void main(String[] args) {ArrayList<Demo> list = new ArrayList<>();int count = 0;try{while(true){
//------------------------------------------------------------------list.add(new Demo());//问题所在!!!!!!!!!!!
//------------------------------------------------------------------count = count + 1;}}catch (Exception e){}}
}

相关文章:

JVM——堆内存调优(Jprofiler使用)Jprofile下载和安装很容易,故没有记录,如有需要,在评论区留言)

堆内存调优 当遇到OOM时&#xff0c;可以进行调参 1、尝试扩大堆内存看结果 2、分析内存&#xff0c;看哪个地方出现了问题&#xff08;专业工具&#xff09; 调整初始分配内存为1024M&#xff0c;调整最大分配内存为1024M&#xff0c;打印GC细节&#xff08;如何添加JVM操…...

Android cmdline-tools 版本与其最小JDK关系

关键词&#xff1a;Android cmdline-tools 历史版本、Android cmdline-tools 最小JDK版本、JDK 对应 major version、JDK LTS 信息 由于 JDK8 是一个常用的、较低的版本&#xff0c;因此只需要关注 JDK8 及以上版本的运行情况。 cmdline-tools 版本和最低 JDK 最终结论&…...

基于ARM+FPGA+AD的多通道精密数据采集仪方案

XM 系列具备了数据采集仪应具备的“操作简单、便于携带、满足各种测量需求”等功能的产品。具有超小、超轻量的手掌大小尺寸&#xff0c;支持8 种测量模块&#xff0c;还可进行最多576 Ch的多通道测量。另外&#xff0c;支持省配线系统&#xff0c;可大幅削减配线工时。使用时不…...

【JAVA学习笔记】43 - 枚举类

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/enum_ 〇、创建时自动填入版权 作者等信息 如何在每个文件创建的时候打入自己的信息以及版权呢 菜单栏-File-setting-Editor-File and Code Templaters -Includes-输入信…...

Springcloud介绍

1.基本介绍 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。Spring …...

LK光流法和LK金字塔光流法(含python和c++代码示例)

0 引言 本文主要记录LK光流算法及LK金字塔光流算法的详细原理,最后还调用OpenCV中的cv2.calcOpticalFlowPyrLK()函数实现LK金字塔光流算法,其中第3部分是python语言实现版本,第4部分是c++语言实现版本。 1 LK光流算法 1.1 简述 LK光流法是一种计算图像序列中物体运动的光…...

数据库索引是什么?创建索引的注意事项

数据库索引&#xff1a; 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有效&#xff09;&#xff0c;在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#x…...

java中的异常,以及出现异常后的处理【try,catch,finally】

一、异常概念 异常 &#xff1a;指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的…...

前端构建但没有更新

使用jenkins构建vue前端代码时&#xff0c;构建完成后&#xff0c;jenkins提示构建成功&#xff0c; 但前端刷新提示还是原来的效果&#xff0c;此时需要查看下jenkins构建日志&#xff0c;如果出现下面的文字&#xff0c;说明缺少依赖&#xff0c;最新的代码并没有构建到项目中…...

【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决

编译时出现的错误&#xff1a; mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:161: recipe for target ‘all’ failed mingw32-make: *** [all] Error 2解决方法&#xff1a; 根据贴吧老哥的解答&#xff0c;发现是mingw版本有问题导…...

#Day Day Plan# 《NCB_PCI_Express_Base 5.0.1.0》pdf 译文笔记 模版

目录 一 本章节主讲知识点 1.1 xxx 1.2 sss 1.3 ddd 二 本章节原文翻译 2.1 ddd 三 本章节关联知识点 2.1 ddd 四 本章节存疑问题 2.1 222 五 总结 一 本章节主讲知识点 1.1 xxx 1.2 sss 1.3 ddd 二 本章节原文翻译 2.1 ddd 三 本章节关联知识点 2.1 ddd 四…...

分代ZGC详解

ZGC&#xff08;Z Garbage Collector&#xff09;是Java平台上的一种垃圾收集器&#xff0c;它是由Oracle开发的&#xff0c;旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器&#xff0c;它主要针对具有大内存需求和低停顿时间要求的应用程序 分代ZGC收集器…...

vue图片懒加载

Vue图片懒加载是一种优化页面性能的技术&#xff0c;它可以延迟加载页面上的图片&#xff0c;直到它们进入可见区域。这可以减少页面的加载时间&#xff0c;提高用户体验。 在Vue中实现图片懒加载可以使用第三方库vue-lazyload。首先需要安装该库&#xff1a; npm install vu…...

【c++】运算符重载实例

重载自增自减运算符 Intger num(2); num; num;对自增运算符的重载要区分前置和后置。在重载之前需要思考一个问题&#xff0c;num是返回一个临时变量还是num对象的本体。 为了解决这个问题可以考虑实现一个Inc_()函数和_Inc()函数分别模仿后置和前置的行为 Integer Inc_(){i…...

用*画田字形状,numpy和字符串格式化都可以胜任

numpy的字符型元素矩阵&#xff0c;可以方便画&#xff1b;直接python字符串手撕&#xff0c;也可以轻巧完成。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《…...

搭建一个windows的DevOps环境记录

边搭建边记录&#xff0c;整个DevOps环境的搭建可能会很久。。。 一、安装Jenkins&#xff1a; 参考&#xff1a;Jenkins基础篇--windows安装Jenkins-CSDN博客 注意上面选择JDK的路径&#xff0c;选择到安装目录&#xff0c;该目录并不一定要在path中配置了&#xff08;就是…...

漏洞扫描系统的主要功能有哪些

漏洞扫描系统是一种自动化的工具&#xff0c;用于发现和报告计算机网络系统中的安全漏洞。这些漏洞可能包括软件漏洞、配置错误、不安全的网络设备等。漏洞扫描系统的主要功能包括以下几个方面&#xff1a; 目标识别&#xff1a;漏洞扫描系统首先需要识别目标系统的基本信息&am…...

Spring Boot配置多个Kafka数据源

一、配置文件 application.properties配置文件如下 #kafka多数据源配置 #kafka数据源一&#xff0c;日志审计推送 spring.kafka.one.bootstrap-servers172.19.12.109:32182 spring.kafka.one.producer.retries0 spring.kafka.one.producer.properties.max.block.ms5000 #kafk…...

Learning Open-World Object Proposals without Learning to Classify(论文解析)

Learning Open-World Object Proposals without Learning to Classify 摘要1 介绍2 相关工作3 方法3.1 基线3.2 基于纯定位的对象性3.3. 对象定位网络 (OLN)4 实验4.1跨类泛化4.2.开放世界类不可知检测4.3更多的跨数据集泛化4.3.1 Objects365 泛化4.3.2 EpicKitchens 的泛化4.4…...

前端在项目中添加自己的功能页面

1.src—>mock–>sideMenue:边表(sidemenue)的子功能的添加&#xff1a;左边功能框中的显示 在相应的父功能添加子功能 id号不能和他人的一样&#xff0c;casecode:就是路由名字 title&#xff1a;中文名称 2.前后端接口(后端程序员给),定义好接口名称 src—>moudles—…...

告别轮询!用STM32 HAL库的LIN主机模式,轻松实现汽车车窗控制(附完整代码)

告别轮询&#xff01;用STM32 HAL库的LIN主机模式&#xff0c;轻松实现汽车车窗控制 在汽车电子系统中&#xff0c;车窗控制看似简单&#xff0c;实则涉及复杂的通信协议和实时性要求。传统方案依赖硬连线或轮询机制&#xff0c;不仅布线复杂&#xff0c;还难以扩展。LIN总线作…...

如何将你的小爱音箱改造成智能AI语音助手:MiGPT终极教程

如何将你的小爱音箱改造成智能AI语音助手&#xff1a;MiGPT终极教程 【免费下载链接】mi-gpt &#x1f3e0; 将小爱音箱接入 ChatGPT 和豆包&#xff0c;改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 想让家里的智能音箱从"…...

运算放大器电流流向的5个常见误区:硬件工程师都踩过哪些坑?

运算放大器电流流向的5个常见误区&#xff1a;硬件工程师都踩过哪些坑&#xff1f; 在硬件设计领域&#xff0c;运算放大器就像一位沉默的舞者——看似动作简单&#xff0c;实则每个细节都暗藏玄机。记得我第一次调试仪表放大电路时&#xff0c;盯着示波器上诡异的电流波形百思…...

通义千问1.5-1.8B-Chat-GPTQ-Int4入门:C语言基础概念问答助手

通义千问1.5-1.8B-Chat-GPTQ-Int4入门&#xff1a;C语言基础概念问答助手 刚学C语言那会儿&#xff0c;指针、结构体这些概念真是让人头大。书上讲得抽象&#xff0c;网上资料又太零散&#xff0c;要是当时有个能随时提问、还能给出代码例子的“随身老师”就好了。现在&#x…...

深入Linux 0.11内核:从_syscall1宏到系统调用表的完整链路拆解

深入Linux 0.11内核&#xff1a;从_syscall1宏到系统调用表的完整链路拆解 在操作系统的演进历程中&#xff0c;系统调用机制始终扮演着用户程序与内核服务之间的关键桥梁角色。对于希望真正理解计算机系统底层运作的开发者而言&#xff0c;掌握系统调用的完整实现链路不仅是提…...

智能学习伙伴:OpenClaw+Qwen3.5-9B构建个性化背单词系统

智能学习伙伴&#xff1a;OpenClawQwen3.5-9B构建个性化背单词系统 1. 为什么需要AI驱动的背单词系统 背单词这件事我坚持了十几年&#xff0c;从纸质单词本到各类APP&#xff0c;始终被两个问题困扰&#xff1a;一是记忆曲线难以严格执行&#xff0c;二是静态词库缺乏语境适…...

OpenClaw技能市场挖掘:Phi-3-mini-128k-instruct适配插件精选

OpenClaw技能市场挖掘&#xff1a;Phi-3-mini-128k-instruct适配插件精选 1. 为什么需要为Phi-3-mini定制技能&#xff1f; 当我第一次在本地部署Phi-3-mini-128k-instruct模型时&#xff0c;发现这个128k超长上下文的小模型特别适合处理办公场景的文档流。但直接通过OpenCla…...

gallery应用商店优化:提升本地AI平台的发现率与下载量

gallery应用商店优化&#xff1a;提升本地AI平台的发现率与下载量 【免费下载链接】gallery A gallery that showcases on-device ML/GenAI use cases and allows people to try and use models locally. 项目地址: https://gitcode.com/GitHub_Trending/gallery44/gallery …...

Go 网络编程超时控制方案

Go网络编程中的超时控制方案 在分布式系统和微服务架构盛行的今天&#xff0c;网络通信的稳定性成为关键。Go语言凭借其高效的并发模型和简洁的语法&#xff0c;成为网络编程的热门选择。网络环境复杂多变&#xff0c;超时控制是确保系统健壮性的重要手段。本文将介绍Go网络编…...

一键迁移方案:OpenClaw配置备份与Qwen3-4B模型快速恢复

一键迁移方案&#xff1a;OpenClaw配置备份与Qwen3-4B模型快速恢复 1. 为什么需要配置迁移方案 上周我的开发机突然硬盘故障&#xff0c;导致所有OpenClaw配置丢失。重新配置飞书通道、模型连接和技能库花了大半天时间。这次教训让我意识到&#xff1a;自动化工具的配置本身也…...