堆轉儲檔案中有什麼呢。
每一個類有多少個對象,它們的值是什麼,都可以在堆轉儲檔案中找到。 1.heap dump
除了使用visual VM 外,還可以使用jmap命令。特別是遠程機器不給你開放連接埠連時,只能使用原始的命令列工具。
//將pid=9406這個java進程的堆,dump到heapDump.hprof檔案中。live表示只輸出存活對象的資訊jmap -dump:live,format=b,file=heapDump.hprof 9406
這隻二進位格式的檔案,無法直接閱讀。尾碼hprof可以理解為Heap PROFile。
2.visual VM簡單分析
圖2-1 visual VM的heapDump檔案分析視圖
3.Memory Analyzer
eclipse的一個外掛程式。在Eclipse Marketplace中搜尋即可安裝。免費,功能比visualVM強大。
圖3-1 搜尋並安裝Memory Analyzer
安裝過後,即可開啟一個.hprof檔案嘗試一下。
圖3-2 Memory Analyzer的視圖 4.OQL 對象查尋語言
OQL,Object Query Language,物件查詢語言。
堆轉儲檔案中的類有上千個,像java.lang.String這樣的熱門類,對象可能也有數千個。如何快速地尋找自己感興趣的對象,就要用到OQL了。
visualVM中的OQL與Memory Analyzer中的OQL文法是不一致的,需要注意。。 4.1 Memory Analyzer的文法
//在String類中搜尋值為"Mozilla.*"的對象。需要注意萬用字元為‘*’,不是sql中的'%'select * from java.lang.String s where toString(s) like "Mozilla.*"
5.shallow size 與 retained size Shallow size ,是該對象自己的基本類型資料的大小之和。 java的引用相當於c++的指標,因此在64位平台上,佔8個位元組,在32位平台上佔4個位元組。
Retained size,是該對象自己的shallow size加上從該對象能 直接或間接訪問到對象的shallow size之和。