或者它是否会使JIT自动处理的代码混乱?
答案 0 :(得分:56)
我还没有找到一个提高性能的案例,我已经尝试了很多不同的地方。 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
}
}
用-optimise
编译时。并且您确实看到了差异,但它通常不会运行得更快,因为JIT编译器可以注意到相同的优化适用于D
。
因此在优化的最后阶段可能值得一试,但如果不检查它是否会对性能产生影响,我就不会费心去做。