2010-04-25 2 views

Antwort

53

Ich habe noch einen Fall zu finden, wo es die Leistung verbessert, und ich habe an etlichen verschiedenen Stellen versucht. Die JVM scheint ziemlich gut darin zu sein, wenn es möglich ist, und selbst wenn du in Scala @inline anforderst, kann es das nicht immer tun (und manchmal habe ich bemerkt, dass es nicht einmal passiert, wenn ich es für nötig halte in der Lage sein).

Der Ort, wo man erwarten, dass ein Bytecode Unterschied zu sehen ist in etwa so:

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 
    } 
} 

, wenn sie mit -optimise zusammengestellt. Und Sie sehen den Unterschied, aber es läuft im Allgemeinen nicht schneller, da der JIT-Compiler bemerken kann, dass die gleichen Optimierungen auf D gelten.

Es kann also einen Versuch in den letzten Phasen der Optimierung wert sein, aber ich würde es nicht routinemäßig tun, ohne zu überprüfen, ob es einen Unterschied in der Leistung macht.

+0

Vielen Dank für die Meldung Ihrer Testergebnisse; rettete mich und wahrscheinlich andere einige Zeit :) –

+10

Sie Argument ist nur wahr, wenn es nur einen JIT-Compiler auf dem Planeten gab. - Aber das ist nicht wahr. Da gibt es Android, dort gibt es IBM, die eigene JVMs produziert. Alles, was der Scala-Compiler * sicher macht * ist also besser als etwas, was JIT * tun könnte. – Martin

+4

@Martin - Ich gebe zu, dass Android nicht ausprobiert haben. Ich habe versucht, JRockit und die IBM JVM mit der gleichen Wirkung wie die Sun JVM (d. H. Keine). –

Verwandte Themen