簡體   English   中英

Java HPROF堆轉儲缺少字段?

[英]Java HPROF heap dump missing fields?

我正在使用Eclipse Memory Analyzer查看HPROF文件。 它為同一類的不同實例顯示不同數量的字段:

似乎丟失的字段可能從未分配過,但是這些丟失的字段的價值是什么? 它們是“零”值還是字段初始化程序的值?

編輯:

JVM是Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

編輯2:

似乎丟失的字段不是“零”(已通過調試確認),但可能從未分配。

下面的OQL查詢表明Eclipse Memory Analyzer實際上知道這些字段中的實際值,但是只是選擇不顯示它們。

根據HProf格式文檔 ,對象的所有字段都存儲在轉儲中,因此MAT可以知道對象的所有字段的值。


OQL窗口

對於OQL,將顯示除具有空值的引用以外的所有引用。

具有9個屬性的對象的myWorkspaceMap為null


支配者樹窗口對我而言,MAT在支配者樹窗口中顯示對象的所有屬性。

屬性窗口

由於統治者樹想法是讓非循環圖MAT確定closeController擁有URLJarFile對象,並且不在主窗口中顯示此屬性。

同樣,這意味着,如果存在對特定對象的多個強引用,並且無法識別該對象的所有者,則該對象將不會顯示在主控樹中。

考慮URLJarFile中的name屬性:

名稱未顯示在統治者樹中

如果我們選擇“列表對象->具有傳入引用”,我們可以看到,此字符串是從多個對象引用的:

從多個對象引用了字符串

問題是我正在查看的視圖僅應列出對象引用 ,因此未顯示null字段或原始值。

解決方案是添加“檢查器”視圖或切換到專用的“內存分析”透視圖,該透視圖將顯示每個選定實例的實際字段,如@Taky的屏幕截圖所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM