菏泽软件开发 济宁软件开发
24小时客服热线:18678812288
行业资讯

软件的性能设计中临时对象对软件性能的影响

投递人 ; 济宁软件开发  发布于2014年09月12日    有人阅读

 临时对象的存在时间一般都比较短暂,除了作为其他数据的容器外,没有其他什么用途,开发人员一般用它向方法传递数据或从方法中返回数据。文章的第一部分探讨了创建临时对象是如何影响程序性能的,并表明恰当的类的接口设计可以有效地减少临时对象的创建。通过避免设计这样的接口,就可以减少临时对象的创建,降低对程序性能的影响程度。在本篇文章中,我将讨论过多地创建临时对象的问题并在后面的文章中提供一些成熟的技术来避免过多地创建临时对象。
    说到创建临时对象,String类是最大的“罪魁祸手”。大量使用BadRegExpMatcher的程序要比使用BetterRegExpMatcher的程序运行速度慢一些。第一,调用程序必须创建String对象向match传递参数,match也必须创建一个String对象向调用程序返回匹配的文本。每次调用时都会创建二个对象,这听起来也许没有什么大问题,但如果频繁地调用match(),创建这二个对象对性能产生的影响就大了。使用BadRegExpMatcher的程序的性能问题并不源于其编码而源于其接口,象这样设计的接口,临时对象的创建是不可避免的。
由于在设计阶段比在完成整个程序后再进行修改能够更好地避免程序性能方面的问题,因此应该在类的接口如何处理对象的创建这个问题上多花些时间。在RegExpMatcher中,其方法要求输入和返回String对象就可能对性能有潜在的影响,因为String类的对象是不可变的,因此对String类对象参数进行处理就会要求在每次调用时创建一个新的String对象。
  由于不可变性通常与额外的对象创建联系在一起——这大部分原因都要"归功"于其不可变性,许多编程人员就断定不可变的对象一定会影响程序的性能。其实真实的情况要复杂得多,实际上,不可变性有时还能够提升程序的性能,可变的对象也能够引起程序性能的下降,可变性对程序性能的影响取决于其使用方式。
  程序会经常对文本字符串进行操作和修改——不可改变性确实是一个麻烦。在每次对String进行操作时——例如查找或选择一个前缀或子串,把它转换为大写或小写,或者将二个字符串合并成一个新的字符串时,就必须创建一个新的String类对象。
  另一方面,我们可以自由地共享一个不可变对象的地址而无需担心对象会被改变,此时,不可变对象在性能上就比可变对象要好许多。

上一篇:恶意软件制作成本低下 智能手机病毒集中爆发

下一篇:中国软件产品消费呈现的几大特点