Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态方法还是单例性能(Android)?_Java_Android_Performance_Singleton_Static Methods - Fatal编程技术网

Java 静态方法还是单例性能(Android)?

Java 静态方法还是单例性能(Android)?,java,android,performance,singleton,static-methods,Java,Android,Performance,Singleton,Static Methods,在一个拥有少量POJO和大量操作它们的帮助器方法的应用程序中,从性能角度看,什么更好:使帮助器类成为单例还是使方法成为静态?静态方法的性能和内存方面会稍好一些: 避免虚拟函数调用的(潜在)开销 消除类的实际实例所需的内存 无需在使用该类时获取该类的实例 但老实说,无论如何,我还是会让它成为一个单身汉。即使在移动环境中,不这样做所获得的收益也很可能很小,因此不会产生任何影响。您能否避免这两种情况,并让它们成为常规课程 忽略性能问题,我建议避免使用单粒子和静态方法来提高可测试性 单例和静态方法很难测

在一个拥有少量POJO和大量操作它们的帮助器方法的应用程序中,从性能角度看,什么更好:使帮助器类成为单例还是使方法成为静态?

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

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

  • 但老实说,无论如何,我还是会让它成为一个
    单身汉。即使在移动环境中,不这样做所获得的收益也很可能很小,因此不会产生任何影响。

    您能否避免这两种情况,并让它们成为常规课程

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

    单例和静态方法很难测试;在这方面,单例基本上是静态方法,但名称不同,他在这方面工作,在这方面有几篇好文章:


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

        话虽如此,在您的应用程序中,这可能并不重要。差别真的很小。如果您的应用程序使用gui、xml呈现、internet连接或其他外部操作进行任何操作,您会发现这些活动大大超过了简单的mathod查找

        即使您没有这样做,在分析过程中,您很可能会遇到一个瓶颈,阻碍您的应用程序,并发现它不是方法查找,而是您自己做的一些逻辑。例如,您使用了arraylist而不是hashset,结果表明contains方法非常昂贵


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

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


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

        好的,那么JDK是用非OO风格编写的,它的所有数组都是如此。sort()、Long.valueOf()等等;)这里有一个静态方法,那里有一个静态方法,而你的整个应用程序只由值对象和静态方法中的所有逻辑组成,这两者之间有很大的区别(这可能不是真的,但你就是这么说的)。@迈克尔:但安卓的内存确实很低。我正在考虑你在这篇文章和在