2010-04-25 18 views

回答

53

我還沒有找到一個提高性能的例子,我已經嘗試了很多不同的地方。 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,所以它通常不會運行得更快。

因此,在優化的最後階段可能值得一試,但我不打算常規做,而不檢查它是否會影響性能。

+0

感謝您報告您的測試結果;救了我,可能還有其他一些時間:) – 2010-04-26 13:27:42

+10

如果地球上只有一個JIT編譯器,那麼你的論點纔是真實的。 - 但是這是錯誤的。有Android,有IBM生產自己的JVM。因此,Scala編譯器所做的任何*確定*都會比某些JIT *可能做的更好。 – Martin 2012-02-09 07:30:36

+4

@Martin - 我承認還沒有試過Android。我已經嘗試了JRockit和IBM JVM,其效果與Sun JVM相同(即沒有)。 – 2012-02-09 16:30:51

相關問題