日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优化软件性能的方法

發(fā)布時間:2023/12/31 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优化软件性能的方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?

添加較小的輔助性函數(shù)

  在最初版本的Swing工具包中,創(chuàng)建過多的Point、Rectangle和Dimension對象會嚴重地影響程序的性能。盡管一次在一個Point或Rectangle對象中返回多個值似乎更有效率,但這樣作的代價要比調用多個方法高得多。在最近的Swing版本推出之前,這個問題可以通過簡單地在組件或其他類中添加一些輔助性的方法得到改善,如下所示:

  public int getX() { return myBounds.x; }
  public int getY() { return myBounds.y; }
  public int getHeight() { return myBounds.height; }
  public int getWidth() { return myBounds.width; }


  現(xiàn)在,調用程序可以在不創(chuàng)建臨時對象的情況下得到同樣的結果,如下所示:

  int x = component.getX();
  int y = component.getY();
  int h = component.getHeight();
  int w = component.getWidth();


  原來的getBounds()仍然可以使用,較小的輔助性函數(shù)只不過提供了一種實現(xiàn)同樣目標的效率更高的方法,其結果是,Rectangle的接口將完全暴露在組件的接口中。當修改Swing使之支持并可以使用這些較小的輔助性函數(shù)后,其結果是,Swing中的許多操作的運行速度都比原來快了二倍。由于GUI代碼對性能比較敏感,這一改進的意義是重大的。

  這種技術帶來的負作用是對象擁有的方法更多了,而且要獲取同一種信息可以有多種方法,這就使文件變得相當大而且也更加復雜了,不利于用戶采用這一技術。但是,象Swing的例子顯示的那樣,在對性能要求比較高的情況下,這種優(yōu)化技術還是十分有效的。


可變性的利用

  除了在組件中添加象上面討論的getX()等具有簡單數(shù)據(jù)類型值的臨時函數(shù)外,Java 2還使用了其他的技術來減少在AWT和Swing中的對象創(chuàng)建活動。在組件和其他的GUI類中添加另一種版本的getBounds(),就可以在沒有創(chuàng)建臨時對象的前提上使調用程序得到象Rectangle類型的返回值:

  public Rectangle getBounds(Rectangle returnVal) {

   returnVal.x = myBounds.x;

   returnVal.y = myBounds.y;

   returnVal.height = myBounds.height;

   returnVal.width = myBounds.width;

   return returnVal;

  }

  調用程序仍然必須創(chuàng)建一個Rectangle對象,不過,可以在以后的調用中重用它。如果一個調用程序反復調用許多Component對象,就可以創(chuàng)建一個Rectangle對象并在每個Component中使用它。需要注意的是,這一技術只適用于可變的對象類型,不可能通過這種方式減少創(chuàng)建String類對象。

  結合二家之長

  一個更好的解決Point等簡單類的對象創(chuàng)建問題的方法是使得Point類成為不可變的,然后再定義一個可變的子類,具體方法如下面的例子所示:

  public class Point {

   protected int x, y;

   public Point(int x, int y) { this.x = x; this.y = y; }

   public final int getX() { return x; }

   public final int getY() { return y; }

  }

  public class MutablePoint extends Point {

   public final void setX(int x) { this.x = x; }

   public final void setY(int y) { this.y = y; }

  }

  public class Shape {

   private MutablePoint myLocation;

   public Shape(int x, int y) { myLocation = new MutablePoint(x, y); }

   public Point getLocation() { return (Point) myLocation; }

  }

  在上面的例子中,Shape可以安全地返回myLocation的地址,因為調用程序如果試圖修改這些域或調用他們的"調節(jié)器"就會返回一個出錯信息。當然,調用程序仍然可以將Point轉換為MutablePoint,但很明顯這會帶來不安全性,雖然調用程序也會得到它們所需要的返回值。)C++的開發(fā)人員會注意到,這一技術與C++中的返回一個Rectangle的常量地址(const Rectangle&)有點類似━━Java不具備這樣的特性。

  在Java 1.3類庫中的java.math.BigInteger類中,一個類無需創(chuàng)建新的對象就返回一個"只讀的"對象。MutableBigInteger類不是公開的,它只供java.math類庫內部使用。但由于BigInteger類中的一些方法(例如gcd())是由許多的算術操作組成的,完成這些操作而無需創(chuàng)建臨時對象將極大地改善程序的性能。



?

轉載于:https://www.cnblogs.com/springMVC/archive/2008/03/07/2204540.html

總結

以上是生活随笔為你收集整理的优化软件性能的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。