• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件測試之Java內存泄漏分析

    發布: 2009-3-31 10:42 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 448次 | 進入軟件測試論壇討論

    領測軟件測試網

    先啟動Optimizeit Suite中的profiler模塊:

    圖5 啟動Profiler模塊

    圖6 在Profiler主界面中添加新Setting

    注意使用Borland Optimizeit Suite時,jar中要把main class設好,classpath中要把所有用到的外部jar包全部輸入,否則無法啟動和正常運行。這個工具不太友好,無法啟動時輸出信息很不明確,所以最好自己先檢查清楚了。

    圖7 在Profiler的Setting中設置main class和classpath

    一般測試時都有運行多次,當發現某些包跟問題無關時,可以把它們過濾掉,這樣最后得到的結果更容易閱讀。

    圖8 設置filter

    用Profiler啟動程序。運行到問題模塊后,點擊工具欄最右邊的按鈕,標記當時各對象占用內存的情況。

    圖9 標記當前內存情況(圖中紅柱上的黑線)

    點擊工具欄上像感嘆號的按鈕,選擇顯示的內容。對這個問題,我覺得show size是最重要的。

    圖10 設置顯示的內容

    再運行一段時間后,按Size diff排序。發現占用內存比較多的了后,雙擊該行,打開該對象的詳細信息(目前bug已經改好,我只是隨便點一個類作為示范)。這時展開整棵樹,就可以看到該類所有實例分別是在什么方法中生成的(如果跟蹤CPU信息,也有這種資源分配樹顯示)。

    圖11 某個類的所有對象的構造位置分布

    因為占用內存最多的往往是系統基本數據類型,例如char,int[]等等,所以需要人工去判斷哪些類是真正的疑點。我發現占用新申請內存排名第20-30之間有幾個類的對象數是完全相同的,而且持續同步增長,估計是某些線程中重復構造對象造成的,比其他以不規則速度增長的類更加可疑,于是就仔細檢查了這幾個的類的詳細信息,發現果然是來自同一個函數。再仔細看代碼,就找到內存泄漏的原因,原來是某行代碼寫錯了,不斷構造新的button。而保存這些button是用Vector!說明我最早使用的檢查HashMap的思路是對的?上е皇菑淖约旱木幊塘晳T出發,沒有考慮到Vector,否則問題就更容易發現了。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    44/4<1234

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>