2009-02-27 776 views

Respuesta

9

Los métodos estáticos serían muy ligeramente mejor rendimiento y la memoria sabia:

  1. Evitar (potencial) por encima de llamadas a funciones virtuales.
  2. Elimina la memoria necesaria para una instancia real de la clase.
  3. Elimina la necesidad de obtener una instancia de la clase cuando la utiliza.

Pero, sinceramente, probablemente aún así sea un singleton de todos modos. Las ganancias que obtendría al no hacerlo son probablemente tan pequeñas que no generarían ninguna diferencia, incluso en un entorno móvil.

6

¿Puedes evitar cualquier situación y hacer que sean clases regulares?

Haciendo caso omiso de la pregunta de rendimiento, recomendaría evitar singeltons y métodos estáticos para mejorar su capacidad de comprobación.

Singletons y métodos estáticos pueden ser muy difíciles de probar; a este respecto, los singleton son esencialmente métodos estáticos pero con un nombre diferente. Misko Hevery, que trabaja en el Google Test team, tiene algunos buenos artículos sobre este tema:

2

Tomando su pregunta a su valor nominal, las llamadas estáticas que es probable la menor cantidad de poder de la CPU La razón es que los métodos normales son dinámicos y requieren una cierta búsqueda en el tiempo de ejecución, mientras que los métodos estáticos están vinculados a un tiempo de compilación.

Habiendo dicho eso, probablemente no importe en su aplicación. La diferencia es realmente pequeña. Si su aplicación hace algo con la interfaz gráfica de usuario, la representación xml, las conexiones a Internet u otra manipulación externa, encontrará que estas actividades hacen que las simples búsquedas de mathod sean un factor enorme.

Incluso si no lo hace, durante la creación de perfiles es más probable que encuentre un solo cuello de botella que contenga su aplicación y descubra que no es la búsqueda de métodos, sino algo de lógica que usted mismo hizo. Por ejemplo, usaste una lista de arrays en lugar de una hashset y el método contains resultó caro.

Así que como el rendimiento en estos casos realmente no importa, recomendaría utilizar las implementaciones de singletons por encima de los métodos estáticos ya que el diseño es un poco más flexible. Aunque fuera de las opciones que ofreciste, dejaría de lado las clases de ayudantes y alinearé los métodos en los de tu pojo.

4

No se preocupe por absurdas micro-optimizaciones como esa. Preocuparse por la mantenibilidad

Parece que la aplicación está escrita en un estilo totalmente no-OO y podría beneficiarse en gran medida de la eliminación de la mayoría de esos "métodos auxiliares" y ponerlos en su lugar, con los datos que operan.

+0

Bien, entonces JDK está escrito en estilo no OO con todo su Arrays.sort(), Long.valueOf(), etc.;) – yanchenko

+0

Hay una gran diferencia entre tener un método estático aquí y allá, y tener toda tu aplicación compuesta de nada más que objetos de valor y toda la lógica en métodos estáticos (que puede no ser el caso, pero así es como lo hiciste sonar) . –

+0

@Michael: pero Android realmente tiene poca memoria. Estoy considerando sus consejos en esta publicación y una publicación en http://stackoverflow.com/questions/1284718/are-static-methods-good-for-scalability – Emerald214

Cuestiones relacionadas