8

在具有少量 POJO 和许多对其进行操作的辅助方法的应用程序中,在性能方面更好的是:使辅助类成为单例还是使方法静态?

4

4 回答 4

11

静态方法在性能和内存方面会稍微好一些:

  1. 避免虚拟函数调用的(潜在)开销。
  2. 消除类的实际实例所需的内存。
  3. 使用时无需获取类的实例。

singleton但老实说,无论如何我可能仍然会这样做。不这样做所获得的收益可能很小,以至于即使在移动环境中,它们也会产生零差异。

于 2009-02-27T15:58:54.407 回答
6

你能避免这两种情况,让他们定期上课吗?

忽略性能问题,我建议避免使用单例和静态方法来提高您的可测试性。

单例和静态方法很难测试;在这方面,单例本质上是静态方法,但名称不同。在Google 测试团队工作的Misko Hevery有几篇关于这个主题的好文章:

于 2009-02-27T16:13:32.250 回答
4

不要担心这样荒谬的微优化。担心可维护性。

听起来该应用程序是完全以非 OO 风格编写的,并且可以从消除大多数“辅助方法”并将它们放在它们所属的位置以及它们所操作的数据中受益匪浅。

于 2009-02-27T16:14:01.717 回答
2

从表面上看你的问题,静态调用可能需要最少的 CPU 功率。原因是普通方法是动态绑定的,需要在运行时进行一些查找,而静态方法绑定编译时。

话虽如此,它在您的应用程序中可能并不重要。差别真的很小。如果您的应用程序使用 gui、xml 渲染、互联网连接或其他外部操作进行任何操作,您会发现这些活动使简单的数学查找相形见绌。

即使您不这样做,在分析期间您更有可能遇到阻碍您的应用程序的单个瓶颈,并发现它不是方法查找,而是您自己执行的一些逻辑。例如,您使用 arraylist 而不是 hashset 并且 contains 方法变得昂贵。

因此,由于这些情况下的性能并不重要,我建议使用静态方法之上的单例实现,因为设计稍微灵活一些。尽管在您提供的选择之外,我会完全放弃辅助类并将方法内联到您的 pojo 中。

于 2009-02-27T16:13:36.540 回答