Rex*_*err 58

我还没有找到一个提高性能的案例,我已经在很多不同的地方尝试过了.JVM似乎非常善于在可能的情况下进行内联,即使你在Scala中要求@inline,它也不能总是这样做(有时我注意到它甚至在我认为它应该是能够).

您希望看到字节码差异的地方是这样的:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

编译时-optimise.并且您确实看到了差异,但它通常不会运行得更快,因为JIT编译器可以注意到相同的优化适用于D.

所以在优化的最后阶段可能值得一试,但如果不检查它是否会对性能产生影响,我也不会费心去做.

  • 如果地球上只有一个JIT编译器,那么你的论证才是真的.- 但是这是错误的.有Android,有IBM生产自己的JVM.因此,Scala编译器确实**的任何东西都比JIT*可能*做的更好. (12认同)
  • @Martin - 我承认还没试过Android.我尝试过JRockit和IBM JVM,效果与Sun JVM相同(即没有). (4认同)
  • 我最近使用内联运气了.对于使用频繁的功能,性能提高约15%. (3认同)