如何查找Java內(nèi)存泄漏如何在Java中發(fā)現(xiàn)內(nèi)存泄漏(例如,使用Jhat)?我試著在Jhat中加載堆轉(zhuǎn)儲,以了解基本情況。但是,我不明白如何才能找到根引用(參考文獻)或者不管它叫什么。基本上,我可以看出哈希表條目有幾百兆字節(jié)([java.util.HashMap$Entry或類似的東西]),但是地圖在整個地方都使用.有沒有什么方法可以搜索大型地圖,或者可能找到大型對象樹的一般根?[編輯]好吧,到目前為止,我已經(jīng)讀過答案了,但我只能說我是個卑鄙的混蛋(這意味著我更感興趣的是學(xué)習(xí)如何使用Jhat而不是支付JProfiler的費用)。而且,Jhat總是可用的,因為它是JDK的一部分。當然,除非Jhat沒有辦法,只能用蠻力,但我不敢相信情況會是這樣。此外,我認為我無法實際修改(添加全并運行足夠長的時間讓我注意到泄漏。
3 回答

MM們
TA貢獻1886條經(jīng)驗 獲得超2個贊
啟動應(yīng)用程序,直到它達到“穩(wěn)定”狀態(tài),這時所有初始化都完成了,應(yīng)用程序處于空閑狀態(tài)。 多次運行懷疑產(chǎn)生內(nèi)存泄漏的操作,以允許發(fā)生任何與緩存、DB相關(guān)的初始化。 運行GC并獲取內(nèi)存快照。 再做一次手術(shù)。根據(jù)操作的復(fù)雜性和所處理數(shù)據(jù)的大小,操作可能需要運行幾次至多次。 運行GC并獲取內(nèi)存快照。 對兩個快照運行一個diff并進行分析。
添加回答
舉報
0/150
提交
取消