2012-06-09 6 views
6

キャスト操作Vs i ++を実行するにはどれくらいの費用がかかりますか? "私はint型= N" その前に想定し</p> <pre><code>i++; </code></pre> <p>:対</p> <pre><code>(MyObject) IObject; </code></pre> <p>:キャストを行うにはどのように高価なのJavaでは、

EDIT:

無視あなたが喜ばならば、第二のために(私は++)と私の直接比較。より一般的な言い方で言えば、一般的なキャスティングはどれくらい費用がかかりますか?単純な変数の宣言と代入を例にとって、VMバイトコード/操作の点でキャストと比較するのはどうですか?

私は測定スティックとしてi ++を使用しました。それは非常に悪い考えでした。彼らがベースラインとして "メートル"を選択したとき、彼らははるかに良くなりました。 Javaで運用コストの基本測定ユニットはありますか? JVMオペレーション?これは、Javaコンパイラがコンパイルするネイティブコードに依存すると思います...私は第二の部分(どのように高価な鋳造された)上で短い答えを行います

+6

これら2つの操作の接続は何ですか?彼らはあなたの "コスト"をどう比較するのですか? – Tudor

+0

何?...あなたは何をしようとしていますか? – Brendan

+0

うわ〜。数分で私たちの最高の時ではない。私は、一般的なキャスティングがどれほど高価であるかを確認しようとしています。 – Robottinosino

答えて

1

を(私はそれで悪いです、私のための物差しを選ぶ):

キャスティングは非常に安価であり、それはカウントどこ重く最適化。 if (o instanceof Clazz) ((Clazz)o)は絶対に無料です(キャスト、小切手自体ではありません)。

キャストがコンパイラによって証明され、定数が折りたたまれていれば、コストはかかりません。さもなければクラスを決定するオブジェクトのヘッダーの負荷が必要です。いくつかのJVMは、クラスのいくつかのビットを使用してクラスを格納することができます。それは重要です。とにかく、負荷が安くてL1キャッシュに当たる可能性があります。実質的にすべてのキャストブランチは、ハードウェアによって正しく予測されます.ClassCastException(速度の遅いパスが発生する可能性は低いですが、このような場合は最適化には問題ありません)を想像してください。

アレイは一般に、フレームワークとそのジェネリックスのコレクションよりもはるかに高速ですが、多くの理由でキャスティングは非常に小さな部分を演奏します。

最後:「メジャー」と言えば、マイクロベンチマークはしばしば驚くべきアイデアであり、アプリケーションのパフォーマンスを測定するのが適切な方法です。 Microbenchmarksでは、JVMの最適化の仕方を深く理解する必要があります。実際に必要なものをベンチマークする必要があります。 Overall it's an art on its own.

関連する問題

 関連する問題