接口设计对软件性能的影响

来源:百度文库 编辑:神马文学网 时间:2024/04/29 10:17:48
性能方面的问题有好多种。最容易修正的一种是,在执行一项计算任务时使用了一个性能不好的算法,例如,在对数目很多的数据进行排序时采用了起泡算法,每次使用时对一个经常使用的数据项进行计算而不是将它保存起来,这些问题一般我们都能很容易发现,而且一旦发现后,都能很方便地进行改正。然而,许多Java程序性能方面的问题都是是由一些比较深奥的、不容易修改的代码━━程序组件的接口设计引起的。
大多数的程序都是由内部人员开发的或从外部购买的组件"组装"而成的。即使软件不完全依赖于原有的组件,面向对象的设计过程也使得应用程序在开发时采用组件形式,因为这样可以简化程序的设计、开发和调试方面的工作。尽管采用组件的好处是不可否认的,我们还应该意识到组件的接口会对使用它们的程序的性能和运行状态产生重大的影响。
也许会有读者问,接口跟性能有什么关系?一个类的接口不但定义了类可以完成的功能,而且还定义了它的对象创建行为和使用它所需要调用的方法的顺序,一个类如何定义它的构造器和方法会影响这个对象是否可以重用,是它本身的方法创建还是要求其客户创建中间对象,客户要使用这个类需要调用多少个方法。
所有这些因素都会影响到程序的性能。Java软件性能管理方面的基本原理之一是:避免创建过多的对象。这并不意味着你不能创建任何对象从而不充分利用面象对象语言带来的诸多好处,而是说在开发对性能敏感的代码时需要对对象的创建保持谨慎。对象创建的代价相当高昂,我们应该在对性能敏感的软件中尽量避免创建临时或中间对象。
在处理字符的程序中,String类是引起对象创建的最大源。因为String类是不可变的,每当一个String类的对象被修改或构造时,都会创建一个新的对象。因此,一个具有性能意识的编程人员总是避免过多地使用String类对象。然而,尽管你在编程中尽量避免使用String对象,还是会经常发现使用的组件接口必须使用String对象,因此,你不可能不使用String类对象。