Frage Ist die @inline-Annotation in Scala wirklich hilfreich?


Oder macht es nur den Code für etwas, für das sich das JIT automatisch sorgen würde?


61
2018-04-25 17:11


Ursprung


Antworten:


Ich habe noch keinen Fall gefunden, in dem es die Leistung verbessert, und ich habe es an 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, an dem Sie einen Bytecode-Unterschied erwarten, 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 kompiliert mit -optimise. Und Sie sehen den Unterschied, aber es läuft im Allgemeinen nicht schneller, da der JIT-Compiler bemerken kann, dass die gleichen Optimierungen gelten D.

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


55
2018-04-25 21:44