[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 13040] Re: 「 Effective Java (第 2 版)」を読む会第 7 回議事録



高橋(徹)です。

> 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