文章目錄
- 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~