选择显示字体大小

优化java性能

xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 


添加较小的辅助性函数

  在最初版本的swing工具包中,创建过多的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; }


  现在,调用程序可以在不创建临时对象的情况下得到同样的结果,如下所示:

  int x = component.getx();
  int y = component.gety();
  int h = component.getheight();
  int w = component.getwidth();


  原来的getbounds()仍然可以使用,较小的辅助性函数只不过提供了一种实现同样目标的效率更高的方法,其结果是,rectangle的接口将完全暴露在组件的接口中。当修改swing使之支持并可以使用这些较小的辅助性函数后,其结果是,swing中的许多操作的运行速度都比原来快了二倍。由于gui代码对性能比较敏感,这一改进的意义是重大的。

  这种技术带来的负作用是对象拥有的方法更多了,而且要获取同一种信息可以有多种方法,这就使文件变得相当大而且也更加复杂了,不利于用户采用这一技术。但是,象swing的例子显示的那样,在对性能要求比较高的情况下,这种优化技术还是十分有效的。


可变性的利用

  除了在组件中添加象上面讨论的getx()等具有简单数据类型值的临时函数外,java 2还使用了其他的技术来减少在awt和swing中的对象创建活动。在组件和其他的gui类中添加另一种版本的getbounds(),就可以在没有创建临时对象的前提上使调用程序得到象rectangle类型的返回值:

  public rectangle getbounds(rectangle returnval) {

   returnval.x = mybounds.x;

   returnval.y = mybounds.y;

   returnval.height = mybounds.height;

   returnval.width = mybounds.width;

   return returnval;

  }

  调用程序仍然必须创建一个rectangle对象,不过,可以在以后的调用中重用它。如果一个调用程序反复调用许多component对象,就可以创建一个rectangle对象并在每个component中使用它。需要注意的是,这一技术只适用于可变的对象类型,不可能通过这种方式减少创建string类对象。

  结合二家之长

  一个更好的解决point等简单类的对象创建问题的方法是使得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的地址,因为调用程序如果试图修改这些域或调用他们的"调节器"就会返回一个出错信息。当然,调用程序仍然可以将point转换为mutablepoint,但很明显这会带来不安全性,虽然调用程序也会得到它们所需要的返回值。)c++的开发人员会注意到,这一技术与c++中的返回一个rectangle的常量地址(const rectangle&)有点类似━━java不具备这样的特性。

  在java 1.3类库中的java.math.biginteger类中,一个类无需创建新的对象就返回一个"只读的"对象。mutablebiginteger类不是公开的,它只供java.math类库内部使用。但由于biginteger类中的一些方法(例如gcd())是由许多的算术操作组成的,完成这些操作而无需创建临时对象将极大地改善程序的性能。

 


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons