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

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