58
或者它只是混淆了JIT會自動處理的東西的代碼?Scala中的@inline註釋是否確實有助於提升性能?
或者它只是混淆了JIT會自動處理的東西的代碼?Scala中的@inline註釋是否確實有助於提升性能?
我還沒有找到一個提高性能的例子,我已經嘗試了很多不同的地方。 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
,所以它通常不會運行得更快。
因此,在優化的最後階段可能值得一試,但我不打算常規做,而不檢查它是否會影響性能。
感謝您報告您的測試結果;救了我,可能還有其他一些時間:) – 2010-04-26 13:27:42
如果地球上只有一個JIT編譯器,那麼你的論點纔是真實的。 - 但是這是錯誤的。有Android,有IBM生產自己的JVM。因此,Scala編譯器所做的任何*確定*都會比某些JIT *可能做的更好。 – Martin 2012-02-09 07:30:36
@Martin - 我承認還沒有試過Android。我已經嘗試了JRockit和IBM JVM,其效果與Sun JVM相同(即沒有)。 – 2012-02-09 16:30:51