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

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

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

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

    軟件的性能設計

    發布: 2009-9-01 11:39 | 作者: 不詳 | 來源: 領測軟件測試網 | 查看: 99次 | 進入軟件測試論壇討論

    領測軟件測試網


      由于不可變性通常與額外的對象創建聯系在一起━━這大部分原因都要"歸功"于其不可變性,許多編程人員就斷定不可變的對象一定會影響程序的性能。其實真實的情況要復雜得多,實際上,不可變性有時還能夠提升程序的性能,可變的對象也能夠引起程序性能的下降,可變性對程序性能的影響取決于其使用方式。

      程序會經常對文本字符串進行操作和修改━━不可改變性確實是一個麻煩。在每次對String進行操作時━━例如查找或選擇一個前綴或子串,把它轉換為大寫或小寫,或者將二個字符串合并成一個新的字符串時,就必須創建一個新的String類對象。

      另一方面,我們可以自由地共享一個不可變對象的地址而無需擔心對象會被改變,此時,不可變對象在性能上就比可變對象要好許多。 

      

    可變對象也存在臨時對象問題

      在RegExpMatcher中,當一個方法返回的數據類型為String類時,就有必要創建一個新的String類對象。在BadRegExpMatcher中存在的問題之一是match()返回的是一個對象而不是一個簡單類型的數據━━因為一個方法返回一個對象,并不意味著一定會創建一個新的對象?紤]一下Point和Rectangle等java.awt中的幾何類,一個Rectangle只不過是由四個整數━━左上角點的X、Y坐標以及寬度和高度組成的,AWT組件類存儲了組件的位置并通過getBounds()方法將它作為一個Rectangle類對象返回:

      public class Component {
       ...
      public Rectangle getBounds();
      }

      在上面的例子中,getBounds()方法僅僅起一個輔助性作用,它只是聲明一些組件內部的有關信息。getBounds()真的必須創建它返回的Rectangle對象嗎?也許是這樣的吧,我們來看一下getBounds()的編碼:

      public class Component {
       ...
      protected Rectangle myBounds;

      public Rectangle getBounds() { return myBounds; }
      }

      當有程序調用上面例子中的getBounds()時,并不會創建新的對象,因為組件已經知道它的位置,因此getBounds()是比較高效的。然而,Rectangle的可變性還引起了其他問題,當一個調用它的程序執行下面的代碼時會出現什么樣的情況呢?

      Rectangle r = component.getBounds();
       ...
       r.height *= 2;

     

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


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