<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    szhswl
    宋針還的個(gè)人空間

    本文通過介紹Optimizeit Profiler的一些主要特征來使你對(duì)它有個(gè)簡(jiǎn)要的了解。如果想要知道更多的信息,請(qǐng)查看Optimizeit Profiler用戶手冊(cè)。可以從Optimizeit Profiler單擊主菜單info|help來查看所有的使用文檔。

    使用中有何問題,請(qǐng)隨時(shí)與Borland Technical Support聯(lián)系。

    啟動(dòng)應(yīng)用程序

    Optimizeit Profiler是通過在一個(gè)獨(dú)立的虛擬機(jī)上運(yùn)行應(yīng)用程序來收集有用的信息。

    在運(yùn)行一個(gè)java程序前,需要安裝一個(gè)java虛擬機(jī)。Optimizeit Profiler默認(rèn)配置是JDK 1.4 or 1.4.1。如果你想使用的另外的虛擬機(jī),可以查看Optimizeit Profiler用戶手冊(cè)中的如何增加額外的虛擬機(jī)部分。

    Optimizeit Profiler可用來測(cè)試任何類型的java程序:標(biāo)準(zhǔn)的應(yīng)用程序、應(yīng)用小程序、servletsjspejb等。本文所使用的都是演示程序,包含在Optimizeit quichktour目錄下。文中所有的演示均可以此來完成。

    1、  打開Optimizeit Profiler

    2、  如果你是第一次打開,將會(huì)自動(dòng)彈出編輯設(shè)置窗口。如果已經(jīng)打開,可以從file菜單下選擇new setting,調(diào)出編輯設(shè)置窗口。

    3、  在程序類型框中選擇Application

    4、  單擊"Program main class or Jar file"右面的“Browse…”按鈕。

    5、  找到\doc\profiler\quicktour\QuickTourApp.jar文件,然后單擊open

    6、  Profiler會(huì)返回到設(shè)置窗口,并且自動(dòng)帶入程序的工作區(qū)和類路徑。在Source Path框中,單擊change…按鈕。

    7、  Source path chooser窗口中,選擇安裝路徑下的\doc\profiler\quicktour目錄;選中\doc\profiler\quicktour\QuickTourApp.jar文件后單擊窗口中的向下按鈕把它加入到source path部分。

    8、  單擊ok增加到源文件中路徑中。設(shè)置好后的對(duì)話框如下:

            9、  單擊Start now按鈕。

    10、 編輯窗口會(huì)自動(dòng)關(guān)閉,并且Optimizeit Profiler自動(dòng)加載事例程序。

    使用Memory Profiler

    當(dāng)你是第一次使用該工具,Optimizeit自動(dòng)打開到內(nèi)存監(jiān)視窗口:

    內(nèi)存監(jiān)視器列出了被測(cè)程序中所有的類并且實(shí)時(shí)統(tǒng)計(jì)每個(gè)類的實(shí)例的數(shù)目。內(nèi)存監(jiān)視器默認(rèn)是以堆模式打開,這樣能夠看到對(duì)象的創(chuàng)建和撤銷。下面的步驟將演示將介紹如何控制內(nèi)存監(jiān)視器以便于分析被測(cè)程序的內(nèi)存使用情況:

    1、  單擊內(nèi)存監(jiān)視器表頭的instance count。這樣將按照已分配的實(shí)例數(shù)來進(jìn)行降序排列。

    2、  在內(nèi)存監(jiān)視器窗口下方的Filters窗口中,輸入你想觀察的某個(gè)類,在filters框中輸入Java.awt.*,并且按回車鍵;這樣將只顯示java.awt類的相關(guān)信息。

    3、  我們可以看到,許多類的實(shí)例數(shù)要么增加,要么減少。增加是因?yàn)橛袑?shí)例生成,而減少是因?yàn)槔厥赵谄鹱饔谩H绻榭磁R時(shí)對(duì)象的創(chuàng)建,可以選中窗口右側(cè)底部的Disable garbage collector按鈕,這樣Optimizeit將一直持續(xù)顯示所有實(shí)例的數(shù)目

    4、  選中java.awt.Color類,然后單擊Allocation Backtrace 按鈕進(jìn)入allocation backtrace 模式。你也可以在類名上雙擊進(jìn)入。Backtrace信息顯示了類的每個(gè)實(shí)例中的方法被調(diào)用的信息。

    5、  Allocation Backtrace視圖中,可以以兩種方式來查看信息:

    l          Hierarchical view分層模式 默認(rèn)顯示樹形圖。在樹形圖中,某個(gè)方法可能顯示在多個(gè)地方,在于誰調(diào)用了這個(gè)方法。但是在圖形視圖中,節(jié)點(diǎn)表示的方法僅顯示一次。它仍然可以有多個(gè)父路徑。

    l          In the Aggregated view圖表模式 每個(gè)節(jié)點(diǎn)將使用線連接起來,或者是到了邊界只有一邊有線。從有多個(gè)子節(jié)點(diǎn)開始,每條連線對(duì)應(yīng)一個(gè)調(diào)用這個(gè)方法的方法。與樹形不同的是,圖表中可能存在循環(huán)。圖表顯示有助于進(jìn)行跟蹤。如果你想找出一條語句是如何被調(diào)用的,那么圖表將是一種快速而簡(jiǎn)易的方法,通過圖表你可以迅速地找出有父子關(guān)系的對(duì)象。

    可以使用按鈕在兩種方式之間切換。

    6、  EventDispatchThread.run()行,單擊左邊的加號(hào)展開。單擊比率最大的節(jié)點(diǎn),直到展開Graphics2d.fill3DRect()行為止。

    7、  雙擊Graphics2d.fill3DRect()行,將顯示顏色實(shí)例分配的源代碼。源代碼將有助于你理解為什么繪制路徑類產(chǎn)生了如此多的實(shí)例。fill3DRect方法分配了許多的顏色,是因?yàn)樗{(diào)用了Color.brighter() 方法and Color.darker()方法

    注意:如果你是第一次使用者,你可能沒有圖中的源代碼路徑。

    使用內(nèi)存監(jiān)視器,可以幫助你創(chuàng)建更少的臨時(shí)對(duì)象。雖然臨時(shí)對(duì)象經(jīng)常很快便被析構(gòu),然而它會(huì)導(dǎo)致垃圾收集更加頻繁。對(duì)于大多數(shù)java虛擬機(jī)來說,當(dāng)垃圾收集器比較忙時(shí),運(yùn)行任何的java程序都會(huì)延遲幾百毫秒。如果使用了過多的臨時(shí)對(duì)象,由于這個(gè)原因會(huì)致使用戶感覺到程序反應(yīng)緩慢。

    內(nèi)存監(jiān)視器同時(shí)有助于理解為什么垃圾收集器沒有析構(gòu)這些對(duì)象。例如,它將幫助我們我們了解當(dāng)一個(gè)對(duì)象不再被使用時(shí)確實(shí)被垃圾收集器析構(gòu)掉。下面的步驟描述了使用內(nèi)存監(jiān)視器來判斷一個(gè)實(shí)例的產(chǎn)生和如何被垃圾收集器收集。

    1、  單擊圖標(biāo)返回到堆模式。

    2、  為了只顯示與Image-related相關(guān)的類,可以清除fileters框中的內(nèi)容,然后輸入*image*,然后按回車鍵。

    3、  選中javax.swing.ImageIcon行,然后單擊圖標(biāo) (顯示實(shí)例和參考圖),顯示出了實(shí)例圖:

    窗口的上方顯示了實(shí)例的字符描述。

    窗口中間部分顯示了所選實(shí)例對(duì)象參考和由對(duì)象所派生的實(shí)例。在這種情況下,因?yàn)?/span>ImageIcon對(duì)象被引用了,所以垃圾收集器沒有收集。

    窗口最下方部分顯示了中間窗口所選實(shí)例的分配路徑。可以看出實(shí)例是構(gòu)造器QuickTourApp分配的。這個(gè)圖像就是作為背景顯示在程序中間的Optimizeitlogo

    內(nèi)存泄漏經(jīng)常是由于在程序運(yùn)行中連續(xù)地引用對(duì)象,因此他們?nèi)匀徽加觅Y源。正因?yàn)槿绱耍绻隳軌蚨ㄎ坏绞褂么罅恳玫膶?duì)象,那么你就能夠定位至對(duì)象占用資源導(dǎo)致內(nèi)存泄漏的根源。為了能夠定位到使用大量引用的對(duì)象,并且跟蹤這些引用:

    1、  打開內(nèi)存泄漏檢測(cè),單擊內(nèi)存泄漏監(jiān)測(cè)按鈕

    2、  為了查找可能的內(nèi)存泄漏,Profiler需要比較一系列堆的狀態(tài)。可以單擊保存堆狀態(tài)按鈕 來創(chuàng)建。

    3、  quicktour程序運(yùn)行15秒以上。

    4、  再次單擊保存堆狀態(tài)按鈕記錄一個(gè)新的堆狀態(tài)記錄。你可以創(chuàng)建多個(gè)堆狀態(tài)記錄。

    5、  From heap state表中為要作為比較的初始狀態(tài),To heap state表中為要與From heap state作比較的狀態(tài)。每當(dāng)選中From heap state表中的記錄后,To heap state表中只能選擇該記錄之后的記錄。

    6、  窗口的中間部分顯示了被比較堆狀態(tài)記錄之后新引用的資源。Count值是這個(gè)對(duì)象遞增引用的數(shù)量。可以單擊count表頭進(jìn)行排序。你可以選擇一個(gè)引用來查看堆狀態(tài)中所有與這個(gè)對(duì)象引用有關(guān)的對(duì)象引用。

    7、  圖中的對(duì)象將有連接線或者邊界。從根節(jié)點(diǎn)開始,都有一個(gè)相應(yīng)的引用。把鼠標(biāo)移到節(jié)點(diǎn)上面,將會(huì)顯示新引用的數(shù)目和該節(jié)點(diǎn)調(diào)用toString()的。把鼠標(biāo)移到末級(jí)節(jié)點(diǎn)上,將會(huì)顯示這個(gè)引用的實(shí)例變量名。

    8、  在圖的上方有兩個(gè)滾動(dòng)條:

    使用詳細(xì)程度滾動(dòng)條來調(diào)節(jié)圖表顯示的詳細(xì)程度。

    使用縮放滾動(dòng)條來調(diào)節(jié)圖表顯示的大小。

    所有不同的顏色代表不同的意思:

    l          藍(lán)色節(jié)點(diǎn)為間接引用句柄。表示不是直接引用,而是引用的引用。

    l          紅色節(jié)點(diǎn)為引用句柄。表示是直接引用。

    l          節(jié)點(diǎn)的引用越多,顏色越深。

    l          后續(xù)連接顯示為綠色線條。后續(xù)連接在引用中對(duì)于一個(gè)對(duì)象是更高層次的引用。所有的后續(xù)連接的邊框?yàn)樗{(lán)色。在引用層次中前續(xù)連接是后續(xù)連接的一個(gè)引用。

    l          當(dāng)選擇一個(gè)節(jié)點(diǎn)以后,與這個(gè)節(jié)點(diǎn)相關(guān)的引用將會(huì)閃爍顯示。

    l          選中一個(gè)節(jié)點(diǎn)然后單擊鼠標(biāo)右鍵,將會(huì)在一個(gè)新的實(shí)例中打開所選擇的節(jié)點(diǎn)。

    使用CPU Profiler

    內(nèi)存監(jiān)視器有助于對(duì)對(duì)象的最小化使用。CPU監(jiān)視器將有助于你了解對(duì)象所使用的時(shí)間。CPU監(jiān)視器在java虛擬機(jī)中可被看作是一個(gè)記錄設(shè)備。下面的步驟描述了如何給出被測(cè)試程序的響應(yīng)時(shí)間和CPU使用率。

    1、  單擊CPU監(jiān)視按鈕切換到CPU監(jiān)視界面。

    2、  單擊開始CPU 監(jiān)視按鈕開始記錄程序的CPU使用率。

    3、  讓程序運(yùn)行一段時(shí)間(比如三秒以上)。

    4、  單擊停止CPU監(jiān)視按鈕停止記錄。CPU監(jiān)視器顯示出了已經(jīng)記錄的CPU   使用信息。

    5、  如果沒有選上,請(qǐng)選擇樹形格式,看到的信息是一樣的。

    6、  單擊窗口上方的下拉框可以顯示出虛擬機(jī)當(dāng)前運(yùn)行所有的線程。

    Thread view

    7、  選擇AWT-EventQueue-0 thread線程,該線程被AWT使用來處理時(shí)間,例如repaint事件。

    8、  展開EventDispatchThread.pumpOneEvent()行。

    9、  單擊EventQueue.dispatchEvent()左方的加號(hào)展開所有的方法,直到展開到JComponent.paintWithBuffer()方法。行前面的圖標(biāo)所表示的意思為:

     表示該方法直接被另外一個(gè)方法調(diào)用。

     表示執(zhí)行時(shí)間最長(zhǎng)的方法。

    在這個(gè)例子中AWT-EventQueue-0線程一直用處理repaint事件。

    10、選擇JComponent.paintWithBuffer()行。如果鼠標(biāo)移到JComponent.paintWithBuffer()所調(diào)用的方法上,將顯示在JComponent.paintWithBuffer()中該方法所使用的時(shí)間比例。

    11、如果要分析那個(gè)線程是空閑的,CPU監(jiān)視器可以同時(shí)顯示CPU使用率和使用時(shí)間。單擊inspector(tool菜單下)打開inspector對(duì)話框。Inspector dialog box

    12、 不選中Ony record CPU usage,然后關(guān)閉窗口。使用這個(gè)特征來選擇緩沖策略,默認(rèn)顯示的是CPU純使用信息。
    查看虛擬機(jī)信息

    Optimizert提供了實(shí)時(shí)顯示與數(shù)據(jù)有關(guān)的高標(biāo)準(zhǔn)性能測(cè)試的信息。使用這個(gè)特點(diǎn),你可以了解到性能問題是和CPU有關(guān)還是和內(nèi)存有關(guān),或者與兩者都有關(guān)。

    單擊 ,切換到虛擬機(jī)模式。

    在這種模式下,顯示四類性能圖標(biāo),每類圖表描述了虛擬機(jī)不同的活動(dòng)信息:

    Virtual machine graph

    堆圖表:左上角的圖表中紅色線表示被測(cè)程序當(dāng)前需要的堆棧的大小,綠色表示被測(cè)程序?qū)嶋H使用的堆棧的大小。

    垃圾收集圖表:有上角的圖中顯示當(dāng)前垃圾收集器的活動(dòng),顯示了垃圾收集時(shí)間占總時(shí)間的比例。有助于觀察垃圾收集器使用的頻率和時(shí)間。

    線程圖:左下角的圖中紅色線表示當(dāng)前運(yùn)行的線程,綠色表示大多數(shù)的線程使用CPU

    類圖:右下角的圖顯示了虛擬機(jī)當(dāng)前加載的類的數(shù)目。

    查看測(cè)試結(jié)果

    Optinizeit包含了許多方法來查看測(cè)試結(jié)果,就象上面的實(shí)時(shí)監(jiān)控方法成功一樣,也可以把所有的信息保存在一個(gè)快照中或報(bào)告中,這樣你就可以在以后分析結(jié)果或者和另外一個(gè)結(jié)果進(jìn)行比較。

    例如,你可以把測(cè)試結(jié)果輸出為一個(gè)html文件。

    1、  當(dāng)演示程序還在運(yùn)行時(shí),單擊CPU監(jiān)視器返回到CPU監(jiān)視界面。

    2、  為了查看所有的信息,完全展開所有的方法。確認(rèn)你需要的信息都顯示在層次視圖中,因?yàn)檩敵鲋胁粫?huì)包含圖表。

    3、  單擊輸出圖標(biāo) Export button 打開輸出窗口:

    Export window

    4、  填寫標(biāo)題,檢查filename框中的路徑是有效的,并且選擇輸出為.html格式。

    5、  單擊okOptimizeit會(huì)把結(jié)果輸出到定義的.html文件中,然后會(huì)自動(dòng)打開。

    Output from an Export command

    現(xiàn)在你就可以共享你的測(cè)試結(jié)果了。

     

    本文只是Optimizeit Profiler的一個(gè)概覽。如果想要了解更多有關(guān)Optimizeit的信息,請(qǐng)查看Optizeit Profiler用戶指南。

    ---------------------------------------------------------------------------------------------------------------------------------
    說人之短,乃護(hù)己之短。夸己之長(zhǎng),乃忌人之長(zhǎng)。皆由存心不厚,識(shí)量太狹耳。能去此弊,可以進(jìn)德,可以遠(yuǎn)怨。
    http://m.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-13 09:11 宋針還 閱讀(557) 評(píng)論(2)  編輯  收藏 所屬分類: 開發(fā)測(cè)試工具

    FeedBack:
    # re: Optimizeit Profiler概覽
    2007-12-14 11:31 | 隔葉黃鶯
    請(qǐng)問你的 Optimizeit 是哪個(gè)版本,我用的 6.0,應(yīng)用可單獨(dú)啟動(dòng),可是換作用 Optimizeit 來啟動(dòng)就只看到內(nèi)存瘋漲,最后一般是應(yīng)用沒啟動(dòng)就 OutOfMemory,或者僥幸起來,也耗去800多M內(nèi)存。  回復(fù)  更多評(píng)論
      
    # re: Optimizeit Profiler概覽
    2008-12-30 12:01 | 過路
    @隔葉黃鶯
    你物理內(nèi)存多少?有一個(gè)默認(rèn)的堆最大值設(shè)置呢。占物理內(nèi)存的1/4  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: jiz zz在亚洲| 亚洲一区免费视频| 久久久久久久亚洲Av无码| 亚洲天堂久久精品| 33333在线亚洲| 日本在线观看免费高清| 免费无码H肉动漫在线观看麻豆| 精品无码AV无码免费专区| 成人A级毛片免费观看AV网站| 国产大片免费观看中文字幕| 亚洲午夜无码久久久久| 精品亚洲aⅴ在线观看| 亚洲成av人在线观看网站| 一级毛片不卡免费看老司机| 久久青草免费91线频观看不卡| 成人影片麻豆国产影片免费观看| 一本色道久久88综合亚洲精品高清| 亚洲成A∨人片在线观看不卡| 亚洲一卡二卡三卡| jizz免费在线影视观看网站| 亚洲视频免费在线播放| 国产一级理论免费版| 亚洲一区二区电影| 男女啪啪免费体验区| 91精品手机国产免费| 国产免费啪嗒啪嗒视频看看| 亚洲成AV人片在线观看WWW| 亚洲日韩AV无码一区二区三区人| 国产精品1024在线永久免费| 日韩亚洲国产高清免费视频| 亚洲精品97久久中文字幕无码| 亚洲沟沟美女亚洲沟沟| 日韩亚洲人成网站| 99久久免费精品高清特色大片| 国产精品成人免费综合| 亚洲综合久久综合激情久久| 香蕉97碰碰视频免费| 成人免费的性色视频| 亚洲宅男天堂在线观看无病毒| 中日韩亚洲人成无码网站| 国产白丝无码免费视频|