簡體   English   中英

為什么char []存活了這么多代,我應該關注嗎?

[英]Why is char[] surviving so many generations, and should I be concerned?

我是第一次在NetBeans中查看分析器,今天早上我注意到我通過Monitor分析器顯示了超過1700個幸存的代,但是堆大小不變。 在做一些閱讀時,我發現這篇文章討論了如何使用NetBeans探查器來發現泄漏。

因此,在關注文章建議后,我開始了一個內存分析器。 在查看結果時,我發現char []占了大多數幸存的世代。 目前,在這篇文章中,char []已經22代了。

現在一些帖子(OldCurmudgeon在底部附近評論)表明,如果我的堆穩定,沒有泄漏, 而其他人說,如果世代繼續增長,那么。 所以我有點困惑,哪個是對的。

所以,我的問題是:

根據以下屏幕截圖,我應該進一步研究潛在的內存泄漏嗎?

內存(堆) 內存(堆)

存儲器(GC) 存儲器(GC)

實時分配的對象 實時分配的對象

char[]可能由String對象保存。 它們可以出於任何目的在任何地方創建,例如探查器和JMX使用它們,因此一個什么都不做的過程將顯示這些(以及不斷增長的堆)

注意:所有字符串文字和類等的名稱將一直存在,直到卸載ClassLoader(這可以是程序的生命周期)

要確定您的堆使用量是否在增長,您應該查看完整GC后保留的數量。 看看每次下降的底部,它對我來說都是一樣的。 其他信息對性能調優很有用,但本身並不是問題。

在我的評估中我也遇到了這些揮之不去的char []。 經過長時間的分析后,我得出結論,其中許多是String常量池的char數組。

沒有看代碼,人們無法分辨。 有些程序使用TB的內存,它們運行良好,因為它不是內存泄漏,它只是程序的工作方式。

Netbeans文檔只定義了幸存的代數 ,而不是如何使用該數字來發現內存泄漏。 而且, char[]只是String的內容,它可以保留很長時間(甚至只要主線程)。

找到泄漏沒有靈丹妙葯。 您應該在可行的負載下運行程序,並查看內存使用情況是否與預期模式一致。 如果不是,那么你有一個問題,但沒有任何上下文,圖表沒有任何意義。

暫無
暫無

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

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