簡體   English   中英

Java:比較Netbeans中的內存堆轉儲

[英]Java: Comparing memory heap dumps in Netbeans

如何比較Netbeans中的內存堆轉儲?

我要做的是將項目配置為使用概要分析,然后在所選代碼行中添加了多個概要分析點(類似於設置斷點)。 這些性能分析點會觸發“快照”,從而創建內存轉儲。

在我的應用程序運行時,“性能分析”選項卡列出了每個性能分析點,並標記了所遇到的命中數,並提供了一個鏈接以打開該性能分析點的報告。 此外,探查器控制面板將新快照添加到列表中。

如果我打開這些報告並單擊鏈接,或者從控制面板中打開快照 ,則在兩種情況下,Netbeans均會打開一個包含SummaryClassesInstancesOQL子屏幕的快照選項卡。

如果我從Profiler控制面板中選擇其中之一,然后按保存,則文件將以HPROF格式保存。

如果選擇菜單Profile --> Compare Memory Snapshots ,它僅允許我選擇NPS格式的文件,而我無法獲取任何文件。

我相信“ 比較內存快照”聽起來應該可以比較堆轉儲,但是我不知道該怎么做。

問題

  • Netbeans將NPS文件放在哪里(如果確實在創建它們)? 如果不是,我如何讓Netbeans創建從概要分析點觸發的NPS文件?

  • 有沒有辦法讓Netbeans比較HPROF文件,因為畢竟這是內存堆轉儲?

  • 還是我完全完全忽略了某些東西?

謝謝!


背景

使用Netbeans 6.7.1

我正在為具有內存泄漏問題的大型應用程序進行內存分析。 我設法使用Netbeans的探查器和JHAT(JDK附帶的命令行實用程序)的組合解決了大部分泄漏問題。 我需要更強大的堆分析功能來解決其余的問題-以前有效的假設優先方法的有效性正在降低。

這個問題確實很具體,有關更多背景信息,請參閱我之前提出的問題

不幸的是,我沒有要求其他可以做到這一點的工具的建議。

從那以后,我發現Netbeans確實支持比較內存堆轉儲,但是僅間接支持。 編輯概要分析點,以便在“堆”上選擇“快照”。 這意味着Netbeans將生成.nps文件而不是.hprof文件。

.nps文件是Netbean自己的專有文件格式,而.hprof是“通用”堆轉儲格式,幾乎所有分析工具(包括JHAT,MAT和Netbeans)都可以理解。

但是,Netbeans的局限性在於它可以查看.hprof文件並進行分析,但無法將它們與另一個.hprof文件進行比較。 但是,它可以將一個.nps文件與另一個.nps文件進行比較。 但是,可用的分析級別受到.nps文件的限制,所以這是一個.nps


因此,回答我自己的問題:

Netbeans將NPS文件放在哪里(如果確實在創建它們)? 如果不是,我如何讓Netbeans創建從概要分析點觸發的NPS文件?

  • 它是一個或另一個,您只能在每個分析點中選擇一個。

有沒有辦法讓Netbeans比較HPROF文件,因為畢竟這是內存堆轉儲?

  • 不能。您無法與HPROF的相比。 比較兩個不同時間點的內存的唯一方法似乎是比較兩個NPS。

我建議使用eclipse的內存分析器: http : //www.eclipse.org/mat/

我知道您是netbeans用戶,但是mat實際上是一個獨立的應用程序(基於rcp),並且能夠加載和比較hprof文件。

我發現它是最好的堆分析器,尤其是對於較大的堆轉儲。

暫無
暫無

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

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