-1

「同期されていないオブジェクトは通常、同期されたオブジェクトよりもパフォーマンスが優れている」という記述は、最近のコンパイラでは常に当てはまるとは限りません。

これは私が今日何度か聞いた主張です。アサーションには2つの異なる解釈があります。

  1. 最新のコンパイラの進歩により、同期されたオブジェクトに課せられるオーバーヘッドは非常に小さくなり、無視することができます。この場合、最新のコンパイラはどのようにしてこの目標を達成しますか?

  2. 同期されたオブジェクトと同期されていないオブジェクトのパフォーマンスが同等である場合や、同期されたオブジェクトのパフォーマンスが同期されていないオブジェクトよりも優れている場合もあります。私はそれが可能だとは思いませんが、誰が知っていますか?

4

1 に答える 1

1

1つのケースは、コンパイラーが、スレッド間エスケープ分析を介して、オブジェクトが複数のスレッドによってアクセスされることは決してないと静的に判別できる場合です。次に、コンパイラは、非同期バージョンのメソッドを使用して「vtable」(または適切なメソッドディスパッチメカニズム)を初期化できます。

PS。上記は、ステートメントの最初の解釈に関するものです。

于 2012-11-21T13:52:22.993 に答える