4

私は、JVM 1.5+ でのオブジェクトの安全でないパブリケーションが、そのようなオブジェクトがスレッド間で可視になることが保証されていないと述べている JVM 仕様に関係なく、問題を引き起こす可能性はほとんどないことを観察しました。

インターネットを見回しているときに、私はこれを見つけました: http://forum.springsource.org/archive/index.php/t-60676.html x86/x64 ベースのマシンでこのような動作が発生する可能性は低いですが、HP PA-RISC または IBM Power... ベースのコンピューター (AS400 など) では発生する可能性が高くなります。」

x86/x64 アーキテクチャは安全でないパブリケーションに対して耐性がありますか? どうして?

4

2 に答える 2

1

問題が x86/x64 CPU で発生する可能性が高いか低いかを推測するつもりはありません。x86/x64 CPU でこの動作が見られる可能性は非常に低いと主張するのは誤りです。

Niklas Schlimm はDZoneでこれに関する記事を書き、マルチスレッド アクセスの変数が volatile と宣言されていない場合に正しくない動作を示す実際の例を示しました。彼は、サーバー VM でのみ動作を再現できると記事に書いていますが、私にとっては、クライアント VM (Oracle Java 7、Intel x64 モバイル CPU) でもテストは失敗します。動作がまったく再現可能であるか、場合によっては散発的にしか再現できないかは、少なくとも Java VM の正確なバージョンと CPU モデルに依存することを覚えておくことが重要です。

于 2013-08-29T12:57:19.500 に答える