文章目录
- 1.确保生成内存溢出文件
- 2.使用idea自带的内存泄漏分析工具
- 3.具体实验一下
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~