2012-01-19 21 views
0

可能重複:
Why defining class as final improves JVM performance?爲什麼要讓課程最終提速?

我已經在我的項目下面的類:

public final class LinkNode 
{ 
    public int value; 
    public LinkNode next; 

    public LinkNode(int value, LinkNode next) 
    { 
    this.value = value; 
    this.next = next; 
    } 

    public LinkNode(int value) 
    { 
    this(value, null); 
    } 
} 

在我的代碼的最慢行(這是總體相當複雜)是在那裏我構建新的LinkNode s。

我發現當我創建類final時,代碼運行速度顯着加快。這是爲什麼?

在這個類中,我還可以做其他什麼來優化這個類,特別是主構造函數嗎?

(例如,是getter/setter方法快於公共領域?還有沒有其他的修飾,我可以添加?等等)

+3

請注意。顯示您比較的基準測試結果。 – Azodious

+4

哦,我發現一個相關的問題:http://stackoverflow.com/questions/3961881/why-defining-class-as-final-improves-jvm-performance – dsg

+0

你確定它會造成速度差嗎? – anubhava

回答

1

我發現,當我做了級決賽中,代碼顯著快就跑。這是爲什麼?

我認爲這是因爲您的基準測試方法存在缺陷。

假設您使用的是最新的Hotspot JRE,JIT編譯器足夠智能,以至於類的final修飾符應該不會對性能產生影響......除非您在應用程序中實際使用該類的子類。

如果您需要確認,請發佈您的方法的詳細信息,包括基準代碼和基準結果。

0

聲明類最終直接影響JVM的性能。最終的類和方法在加載到JVM之後可以內聯,因爲那時JVM肯定知道該方法是最終的。因此,即時Java編譯器可能會有性能提升。

您可能想要查看這裏提供的鏈接以瞭解進一步的詳細信息:http://www.javaperformancetuning.com/tips/final.shtml

+0

無論如何,JIT都會內聯方法,並在必要時去優化它。我正在和斯蒂芬的解釋一起:有缺陷的測試。 – Voo

+1

我不會依賴鏈接頁面中的信息。 1)它說「可以」和「會」在整個地方,這意味着作者陳述的是理論而不是事實。 2)沒有提及基準或權威來源。 3)甚至沒有提及Java的特定版本/版本,並且實際性能取決於此是衆所周知的事實。 –

相關問題