高橋(徹)です。 > Java読書会「Effective Java 第2版を読む会(第7回)」議事録 > 【宿題】本項目のコード(synchronized版、volatile版、Atomic版)の3つを > ベンチマークで比較しよう > →どなたかベンチマークコードの提供求む! > →デュアルコア、クァッドコア、シングルコアで皆様比較して結果を > 報告しよう! 宿題にトライしてみました。 Effective Java 第2版の項目66にある、アトミックなインクリメント (generateSerialNumber)の実現方式の違いによるサンプルを作成しました。 ディレクトリツリーをZIPで固めたファイルを添付します。コンパイル・実行は 添付内のREADME.txtを参照ください。 ○ソースプログラムの構成 bench2 +-- nco | +-- SerialNumber.java volatileフィールドによる不完全な実装 +-- syn | +-- SerialNumber.java 同期メソッドによる実装 +-- ato | +-- SerialNumber.java アトミック整数による実装 +-- util | +-- ConcurrentGauge.java 並行実行計測フレームワーク +-- MTTest.java 起動用mainメソッド +-- README.txt 本ファイル ○結果について AMD Phenom(4コア)、Vista 64bit、JDK1.6.0 Update12(64bit)で実行した 結果を以下に載せます。 --------------------+--------------- nco(不完全) | 405,980,240 syn(同期メソッド) | 343,008,905 ato(アトミック整数)| 2,679,592,710 アトミック整数が10倍近く遅いという意外な結果になりました。
Attachment:
bench2.zip
Description: Zip compressed data