jvm内存溢出排查(使用idea自带的内存泄漏分析工具)

文章目录

1.确保生成内存溢出文件

想分析堆内存溢出,一定在运行jar包时就写上参数-XX:+HeapDumpOnOutOfMemoryError,可以看我之前关于如何运行jar包的文章。若你没有写。可以写上参数,重启你的项目,等你的项目发生下一次堆内存溢出异常,在运行的同级文件夹,将产生类似这样一个文件java_pid74935.hprof,若你已经有这个文件,那么可以继续往下看。

2.使用idea自带的内存泄漏分析工具

在Java界,有太多这样的工具了,如:

  • Eclipse Memory Analyzer(MAT):MAT是一个功能强大的内存分析工具,用于分析Java堆转储文件(如.hprof文件)。它可以帮助你识别内存泄漏、查找对象的引用链、分析对象的大小和数量等。MAT提供直观的图形界面和交互式报告,使你能够深入了解应用程序的内存使用情况。

  • VisualVM:VisualVM是一个功能齐全的Java虚拟机监控和分析工具。它包含了一系列插件和功能,可以监视应用程序的内存使用、线程状况、垃圾收集等。VisualVM还提供了堆转储和线程转储功能,方便你进行更详细的分析。

  • YourKit Java Profiler:YourKit是一款商业级的Java性能分析工具,具有强大的内存分析功能。它可以帮助你发现内存泄漏、定位内存消耗高的代码路径,并提供详细的对象和堆栈跟踪信息。YourKit还提供了实时的性能监控和分析,帮助你优化应用程序的性能。


这些工具的使用下载,百度谷歌都有相关资料。But!!! 我这么懒的人你指望我下载一个工具去分析???成心难为我是吧!

我直接用idea!在新版本的idea里,有这么一个东西,像一个仪表盘,自打我学习Java,用上idea,一直不知道这是做什么的,直到今天为了搞内存分析,这可太神奇了,IDEA yyds!

小仪表盘的名字叫Profiler,至于这个Profiler在idea的哪里打开。谷歌给我的信息如下:

要使用CPU Profiler,请在IntelliJ IDEA 中打开「Run」菜单,然后选择「Profile CPU」。 您还可以在「View」菜单中选择「Tool Windows」,并选择「CPU Profiler」,以显示该工具的图形界面。

不过我这个idea2023版本貌似页面上就有。这里让我们打开溢出heap文件。

打开后页面如下

观察可知。大对象是哪个类,在哪一行产生,占据了多少内存,以及饼图其实都有,这里只是引路,至于内存分析的理论知识,就需要你再研究研究了。基于这一篇内容,你是可以知道如何用工具分析内存溢出文件,还有怎么产生内存溢出文件。

3.具体实验一下

如图,我刻意在这个类里写了个不断产生对象的代码,刻意制造堆溢出。然后分析可得。

直接检测到这个类的哪一行不断产生大对象导致堆溢出,easy~

相关推荐
深海呐9 小时前
Java 位运算符的实际应用:不止面试刷题,业务同样能用
java·位运算符·java 位运算·java 开发技巧·状态位设计·java 高阶用法·位运算符实战
2602_959960929 小时前
电商场景Java面试:Spring Boot、JVM、Redis、Kafka、微服务与分布式事务考点解析——谢飞机的作死面试记
java·jvm·spring boot·redis·面试题
路多辛10 小时前
一个 Go 写的全能 AI Agent,讲讲 covo-agent
java·开发语言·golang
杨丰玮41810 小时前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(四)
java·游戏·计算机外设
阿沐沐,10 小时前
PowerShell 里改了 config.toml,Codex CLI 仍用旧值:先分清该改哪一层
java·服务器·数据库·人工智能·ai·ai编程
杨丰玮41810 小时前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(二)
java·游戏·计算机外设
Rain的Java大神之路10 小时前
如何避免订单重复提交
java·redis·后端·面试·架构·rabbitmq·rocketmq
学无止步_穷其一生10 小时前
把 DeepSeek Harness 智能体嵌进 IntelliJ IDEA —— 类 Qoder 的 AI 编程插件
人工智能·intellij-idea·idea插件·deepseek
ps酷教程10 小时前
解析自定义数据
java