首先你得有一個dump文件
dump文件獲取方式
- vm參數(shù)配置
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=c:/heap.bin
- jmap指令
jmap -dump:<dump-options><pid>
比如 jmap -F -dump:live,file=jmap.hprof [PID] 導出內(nèi)存dump文件
通過Memory Analyzer分析
在overview下整個內(nèi)存的使用情況:
image.png
在dominator_tree視圖下,該視圖列舉了所有的大內(nèi)存對象
image.png
右擊查看代碼調(diào)用該對象的類
image.png
在我的代碼里面是這樣的情況:
image.png
這個map對象占用大量的內(nèi)存了,到這里問題原因已經(jīng)找到房蝉,接下來結(jié)合代碼邏輯修改就可以了,很簡單的哦扣甲!
大家也可以通過ema自動生成Leak Supects Report 視圖中查看可能造成OOM的對象分析
image.png
image.png
我這里是有10個大對象
image.png
根據(jù)這里給出的地址號去dominator_tree查找對應(yīng)的被對象南用,比如這里的
0x6c640b690
image.png
好了耗跛,分享結(jié)束?诹2场显晶!