2010-04-25 15 views

Respuesta

53

Todavía tengo que encontrar un caso en que mejore el rendimiento, y lo he intentado en bastantes lugares diferentes. La JVM parece ser bastante buena para delimitar cuando es posible, e incluso si pides @inline en Scala, no siempre puede hacerlo (y a veces me he dado cuenta de que ni siquiera cuando creo que debería hacerlo) ser capaz de).

El lugar donde se espera ver una diferencia en el código de bytes es algo como esto:

object InlineExample { 
    final class C(val i: Int) { 
    @inline def t2 = i*2 
    @inline def t4 = t2*2 
    } 
    final class D(val i: Int) { 
    def t2 = i*2 
    def t4 = t2*2 
    } 
} 

cuando se compila con -optimise. Y ve la diferencia, pero generalmente no se ejecuta más rápido ya que el compilador JIT puede notar que las mismas optimizaciones se aplican al D.

Así que puede valer la pena intentarlo en las etapas finales de la optimización, pero no me molestaría en hacerlo rutinariamente sin verificar si hace una diferencia en el rendimiento.

+0

Gracias por informar los resultados de su prueba; Me salvó a mí y probablemente a otros en algún momento :) –

+10

Tu argumento solo es cierto si solo había un compilador JIT en el planeta. - Pero esto no es cierto. Existe Android, existe IBM que produce sus propias JVM. Entonces, cualquier cosa que haga el compilador de Scala * con seguridad * es mejor que algo que JIT * pueda * hacer. – Martin

+4

@Martin - Admito que no he probado Android. He probado JRockit y IBM JVM con el mismo efecto que Sun JVM (es decir, ninguno). –

Cuestiones relacionadas