63 votes

L'annotation @inline dans Scala aide-t-elle vraiment les performances?

Ou cela encombre-t-il simplement le code pour quelque chose que l'EJI prendrait automatiquement en charge de toute façon.

58voto

Rex Kerr Points 94401

Je n'ai pas encore trouvé un cas où il améliore les performances, et j'ai essayé dans un certain nombre de différents endroits. La JVM semble être tout à fait bon à l'in-lining, lorsque c'est possible, et même si vous demandez @inline dans Scala, on ne peut pas toujours le faire (et parfois, j'ai remarqué qu'il n'a même pas quand je pense qu'il devrait être capable de).

L'endroit où vous vous attendez à voir un bytecode différence est dans quelque chose comme ceci:

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

lorsqu'il est compilé avec -optimise. Et que vous ne voyez pas la différence, mais il généralement ne pas exécuter n'importe quel plus rapidement puisque le compilateur JIT peut remarquer que les mêmes optimisations s'appliquent D.

Ainsi, il peut être vaut la peine d'essayer dans la phase finale de l'optimisation, mais je ne serais pas la peine de faire régulièrement sans vérifier pour voir si cela fait une différence dans la performance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X