[發明專利]一種Java內存泄漏分析方法及裝置有效
| 申請號: | 201811188866.4 | 申請日: | 2018-10-12 |
| 公開(公告)號: | CN109408383B | 公開(公告)日: | 2023-04-14 |
| 發明(設計)人: | 易存道 | 申請(專利權)人: | 北京寶蘭德軟件股份有限公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 北京路浩知識產權代理有限公司 11002 | 代理人: | 王瑩;李相雨 |
| 地址: | 100020 北京市朝*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 java 內存 泄漏 分析 方法 裝置 | ||
本發明實施例公開一種Java內存泄漏分析方法及裝置,其中,方法包括:將快照信息分為對象快照和集合對象快照兩類,其中,所述集合對象快照只關注集合并且可收集集合寫操作的調用棧,所述對象快照關注所有對象,但不會收集對象調用棧;按照預設集合對象快照采集規則,采集集合對象快照;按照預設對象快照采集規則,采集對象快照;根據所采集的對象快照和集合對象快照進行對比分析,獲得Java內存泄漏分析結果。本發明實施例能夠減少Java內存泄漏分析的人力消耗,降低對維護人員的能力要求,減少快照對磁盤的消耗,大大降低了對可能發生的內存泄露進行的預警和定位的技術難度。
技術領域
本發明實施例涉及計算機技術領域,具體涉及一種Java內存泄漏分析方法及裝置。
背景技術
目前,針對程序的內存泄漏檢查方式主要是內存快照分析與對比。具體的,測試人員在對程序測試過程中每隔預置時間抓取內存快照,并通過人工分析查找出相鄰兩次內存快照之間的差異,來找出那些沒釋放的對象。
但是,利用上述現有的方法來檢查內存泄漏需要測試人員對獲取內存快照的時間的把握以及對業務有一定程度的了解,人工成本較高,而且獲取內存快照的時間點容易出錯,在設計上用作緩存的內存和沒有及時釋放的內存會被誤判為泄漏的內存。
發明內容
由于現有方法存在上述問題,本發明實施例提出一種Java內存泄漏分析方法及裝置。
第一方面,本發明實施例提出一種Java內存泄漏分析方法,包括:
將快照信息分為對象快照和集合對象快照兩類,其中,所述集合對象快照只關注集合并且可收集集合寫操作的調用棧,所述對象快照關注所有對象,但不會收集對象調用棧;
按照預設集合對象快照采集規則,采集集合對象快照;
按照預設對象快照采集規則,采集對象快照;
根據所采集的對象快照和集合對象快照進行對比分析,獲得Java內存泄漏分析結果。
可選地,所述根據所采集的對象快照和集合對象快照在線或離線進行對比分析,獲得Java內存泄漏分析結果,包括:
根據所采集的對象快照和集合對象快照,在線或離線進行對比分析,獲得Java內存泄漏分析結果;
和/或,
所述采集集合對象快照和采集對象快照的動作是在檢測到用戶的觸發指令時采集或者是按照預設時間定時采集。
可選地,所述按照預設集合對象快照采集規則,采集集合對象快照,包括:
預先定義一個弱引用集合存放需要關注的集合對象的弱引用,每隔預設時間段采集需要關注的集合信息上報數據庫,形成一次集合對象快照;其中:
未開啟內存快照功能不采集;
集合內元素個數未達到預設第一閾值不采集;
對象生存時間未達到預設第二閾值不采集;
如果采集的對象在上報前被回收了,所述弱引用集合自動清理掉該對象;
上報前判斷集合的當前狀態,如果當前集合內元素個數減少到所述預設第一閾值以下,清除對當前集合的引用,不上報當前集合的信息。
可選地,所述集合對象快照的采集利用了字節碼注入技術,對所有實現了java.util.Collection和java.util.Map的類進行注入改造,所有對集合的寫操作都先執行是否采集的判斷。
可選地,所述按照預設對象快照采集規則,采集對象快照,包括:
每隔預設時間段采集一次對象數據,將數量到達預設第三閾值的類信息上報數據庫,形成一次對象快照;其中:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京寶蘭德軟件股份有限公司,未經北京寶蘭德軟件股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201811188866.4/2.html,轉載請聲明來源鉆瓜專利網。





