程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 使用OptimizeIT進行Java內存洩露的檢測

使用OptimizeIT進行Java內存洩露的檢測

編輯:關於JAVA

java程序也會引起內存洩露已經是公開的秘密了,工作中需要對該問題引起充分的重視。

市場上能夠進行java內存檢測的工具也有不少,我在工作中使用JBuilder自帶的Optimize工具,現就最近一次使用Optimize的工程及經驗進行以下梳理。

前一段時間根據需要,對工作中維護的某個模塊進行了java內存洩露的測試,結果發現了很嚴重的問題:該模塊一共有6大基本功能,每個功能每操作一次,大約要新消耗9-10k的內存空間,生成110個左右的新對象。作為商用軟件產品是絕不允許這樣的問題的出現的。

OptimizeIT有整合進JBuilder版本,也有單獨的版本,使用起來基本上都是一樣的,它有4大功能,能夠進行內存profile,cpu的profile,代碼的覆蓋率的檢查,以及threads debug等,能夠對普通應用程序,jsp/servlet,以及服務器請求等進行剖析。其它的沒有用過,這次主要使用內存profile,發現這個這個咚咚比較好用。(其實,borland出品的工具比較很好用的,但是borland IDE目前的處境真是讓人揪心啊)

下面介紹怎樣使用OptimizeIT工具進行內存洩露的檢測和解決。

先說檢測的思路:程序運行從一種狀態進經過運行返回到初始狀態,中間過程會產生很多的對象,而這些中間產物最終是應該被清除掉,如果沒有被完全清除,就說明程序中有了內存洩露。換句話說,通過比較程序運行前後兩種狀態下堆內存中的對象的種類和數量的多少,可以判斷出程序中有沒有產生內存洩露。當終了時刻程序堆內存裡面對象的種類和數量,比初始時刻多,基本就可以確定程序中存在內存洩露了。

接著說這次使用OptimizeIT檢測的過程。

1.首先使用JBuilder建立一個可運行的工程,再進行工程運行屬性的配置的時候可以同時進行OptimizeIT的配置,主要是選擇內存洩露選項(以及其它的可選項,不過很少用)。

2.點擊工具欄上的Optimize按鈕開始檢測,該按鈕位於程序運行按鈕的右邊,帶有一個秒表的樣式。

3.Optimize啟動之後會展示幾個Tab頁視圖,我們主要關心內存視圖。

4.默認的在內存視圖中顯示的是堆內存視圖,通過在該試圖下方輸入過濾條件,在該視圖的中部,可以得到我們關心的類的對象實例情況。

5.運行程序到某一個初始狀態。

6.回到Opimize,運行垃圾回收器,為了盡可能調動GC,建議連續運行GC三次以上(簡單的說就是多點擊記下按鈕而已)。

7.對當天的狀態進行標記,也就是點擊一下視圖右上角的帶鉛筆樣式的圖標。

8.行程序的功能,然後關閉該功能,使程序的退回到原來的狀態,基本上就是在Optimize上作標記時刻的界面樣子。

9.Optimize堆內存視圖,多次進行GC。

10.timize報告出從最近一次做標記以來內存對象(實例)的變化情況。由於我們已經進行過濾,所以imize不會顯示我們關心的包(或者類)以外的對象的情況。

通過這種比較,我們可以發現程序中是否有內存洩露。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved