2012-01-19 8 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を作っています。

クラスfinalを作成したとき、コードが大幅に高速に実行されていました。何故ですか?

このクラス、特にプライマリコンストラクタを最適化するためにこのクラスでできることは他にありますか?

(例えば、速い公共の場よりもゲッター/セッターです?私は追加することができますが、他の修飾子か?など)

+3

plsのリンクをご確認ください。比較したベンチマーク結果を表示します。 – Azodious

+4

ああ、私は関連する質問を見つけた:http://stackoverflow.com/questions/3961881/why-defining-class-as-final-improves-jvm-performance – dsg

+0

あなたはそれが実質的にスピードの違いを作りますか? – anubhava

答えて

1

私はクラスの決勝を作ったとき、コードが大幅に速く走ったことがわかりました。何故ですか?

ベンチマーク方法に欠陥があると思われます。

最近のHotspot JREを使用していると仮定すると、JITコンパイラはスマートであるため、アプリケーションのクラスのサブクラスを実際に使用しない限り、クラスの修飾子はパフォーマンスに影響しません。

確認が必要な場合は、ベンチマークコードやベンチマーク結果などの方法論の詳細を投稿してください。

0

finalの宣言は、JVMのパフォーマンスに直接影響します。最終的なクラスとメソッドは、その時点でJVMがメソッドが最終的であることを確実に知っているため、JVMにロードされた後にインライン化することができます。そのため、ジャストインタイムJavaコンパイラのパフォーマンスが向上する可能性があります。

さらに詳しい情報については、http://www.javaperformancetuning.com/tips/final.shtml

+0

JITは、メソッドをインラインで行い、必要に応じてメソッドを非最適化します。私はスティーブンスの説明:欠陥のあるテストに行くつもりです。 – Voo

+1

リンク先ページの情報には依存しません。 1)それは、どこにでも "でき"、 "あり"と言います。つまり、著者は事実ではなく理論を述べています。 2)ベンチマークや決定的な情報源への言及はない。 3)Javaの特定のバージョン/リリースについては言及していません。実際のパフォーマンスはこれに依存していることはよく知られています。 –

関連する問題