簡體   English   中英

分析內存時使用哪個GC?

[英]Which GC to use when profiling memory?

我使用NetBeans探查器(實際上是嵌入式VisualVM)來監視Java應用程序的內存消耗。 我使用視圖, 尚存的生成視圖和內存轉儲來跟蹤內存泄漏。

堆視圖顯示了已使用的內存總量,但是由於垃圾回收器管理內存的方式,這有點混亂。 該圖基本上是鋸齒形的,因此不是特別可讀。 有時,我會強制執行GC,以便我可以更准確地了解實際內存消耗。

我想知道:是否有一個垃圾回收器更適合於內存分析,並且生成的堆圖更接近於實際的內存使用情況? 或更籠統地說,我可以使用哪些JVM設置( -XX選項或其他設置)來有效地跟蹤內存泄漏?

示例堆圖

您在圖中看到的應用程序內存利用率的真實行為。 重復的鋸齒形可能是由於分配了被清除的短壽命物體。 如果您認為內存泄漏,請對堆進行快照,並查看堆中保留了哪些對象。 您可以使用拍攝快照的JConsole並打開得到的轉儲文件使用HPjmeter

我建議您在不使用分析器的情況下使用打算使用的GC。 使用這種方法,您將獲得一個圖形,該圖形更像應用程序的行為,盡管並不總是那么可讀。

如果您想要一個更具可讀性但不太現實的圖形,則可以將最小內存大小增加到1 GB。 這將導致較少的GC和較少的尖峰圖,但是除了使圖更漂亮之外,可能對您沒有幫助。

暫無
暫無

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

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