2012-01-07 4 views
3

SoneoneはAtomicIntegerがJNIを使​​用して実装されていると言いました。したがって、synchonizationよりもはるかに高速です。これは本当ですか?AtomicIntegerはJNIベースで実装されていますか?

+1

実際に「JNI」とか、「ネイティブコード」と言われましたか?大きな違いがあります。 –

+0

違いは何ですか? – user705414

+2

JNIは* external *ネイティブコードと相互運用する方法です。このケースでは、コードがJVMの一部であると期待しています。したがって、多くのフープを実行する必要はありません。 –

答えて

7

JNIに基づいて実装される可能性は低いですが、これは重大なオーバーヘッドを意味するためです。最後に、OpenJDKの実装は、ほとんどがJVMプリミティブ(JVMのネイティブコードで特別に実装されたメソッド呼び出し)として実装されているsun.misc.Unsafeのメソッドに基づいています。

+3

+1:私はそのJVMイントリンシクスと呼ばれると思います。 Unsafeの多くの「ネイティブ」メソッドは、ネイティブコードにコンパイルされると効果的にインライン展開されます。 –

+1

重要な注意点は、sun.misc.Unsafeを使用するように(APIでは)定義されていないため、Sun/Oracle/OpenJDK以外のVMはAtomicIntegerをまったく異なる方法で実装する可能性があります。 AtomIntegerを使用しない場合は、すべてのVMでうまく動作する可能性が高いため、AtomicIntegerを使用することをお勧めします。 –

0

AtomicIntegerは同期のロックメカニズムを呼び出さないため、適切な状況でパフォーマンス上の利点が得られます。

関連する問題