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

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



小棚木です。

Item66の宿題ですが、いろいろなケースで試してしました。
同期メソッドは環境によって大きく異なる結果になりました。

(9)以外はデュアルコア、(9)のみシングルコア環境です。
スレッド数は4で、すべて同一のバイナリを使用しています。
(ただし、(1),(2)はJDK5でコンパイル。)

1. JDK5とJDK6の比較 (1)〜(3)
⇒ JDK 5では同期メソッドは非常に遅い

2. 同一マシンでいろいろなOSで比較 (3)〜(7)
XP(32bit)、Linux(64bit)、Solaris(64bit)

3. 64bit環境で32bit JDKと64bit JDKも比較 (4)/(5), (6)/(7)

4. Intel CPUについても計測 (8), (9)

----------------------------------------------------
(1)-(7)は同一マシン(トリプルブート環境)で計測
CPU: AMD Athlon 64X2 DualCore Processor 3800+
Memory: 3GB

(1) XP-AMD-JDK5
OS: Microsoft Windows XP Professional SP3(32bit)
Java: JDK 1.5.0_17(32bit)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 249,068,841 | 253,785,013 | 418,195,853
同期メソッド |17,097,588,102 |15,766,089,021 |16,522,166,120
アトミック整数 | 361,472,967 | 423,660,898 | 2,310,423,636

(2) (1)のバイナリをJDK6で実行
OS: Microsoft Windows XP Professional SP3(32bit)
Java: JDK 1.5.0_17(32bit) → JDK 1.6 Update12(32bit)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 255,303,048 | 247,908,428 | 422,535,965
同期メソッド | 258,808,382 | 1,979,800,820 | 2,279,985,445
アトミック整数 | 374,851,063 | 387,568,357 | 2,238,311,992

(3) XP-AMD-JDK6
OS: Microsoft Windows XP Professional SP3(32bit)
Java: JDK 1.6 Update12(32bit)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 259,404,827 | 257,981,182 | 423,133,841
同期メソッド | 266,893,732 | 1,920,549,888 | 2,163,707,678
アトミック整数 | 383,222,135 | 392,439,158 | 2,265,356,316

(4) Linux(x64) - 32bit JDK
OS: CentOS 5.2 x64版
Java: JDK 1.6 Update12(32bit)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 347,461,750 | 246,858,750 | 470,681,750
同期メソッド | 271,786,000 | 2,407,350,375 | 2,327,043,125
アトミック整数 | 363,006,250 | 290,814,250 | 2,158,710,000

(5) Linux(x64) - 64bit JDK
OS: CentOS 5.2 x64版
Java: JDK 1.6 Update12(64bit) (-clientは無効)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 372,804,750 | - | 462,736,500
同期メソッド | 172,153,500 | - | 3,326,747,250
アトミック整数 | 288,579,750 | - | 2,043,495,875

(6) Solaris(x64) - 32bit JDK
OS: OpenSolaris 2008/11 x64版
Java: JDK 1.6 Update12(32bit)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 286,391,302 | 230,507,597 | 427,017,163
同期メソッド | 1,016,705,368 | 3,193,659,453 | 2,535,042,058
アトミック整数 | 448,602,353 | 355,839,276 | 2,169,151,241


(7) Solaris(x64) - 64bit JDK
OS: OpenSolaris 2008/11 x64版
Java: JDK 1.6 Update12(64bit) -d64オプション (-clientは無効)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 281,332,712 | - | 595,892,287
同期メソッド | 239,740,008 | - | 2,428,330,518
アトミック整数 | 376,946,542 | - | 2,573,738,053

(8) XP - Core2Duo
CPU: Intel Core2Duo U7600 1.20GHz
Memory: 2GB
OS: Microsoft Windows XP Professional SP3(32bit)
Java: JDK 1.6 Update12(32bit)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 154,971,058 | 150,828,702 | 331,595,845
同期メソッド | 1,402,734,566 | 1,581,981,090 | 1,766,773,012
アトミック整数 | 356,669,877 | 349,995,216 | 1,844,921,666

(9) Linux - Pentium4 シングルコア
CPU: Intel(R) Pentium(R) 4 630(3GHz)
Memory: 1GB
OS: FedoreCore5
Java: JDK 1.6 Update12(32bit)
| (1) | (2) | (3)
-------------------+---------------+---------------+---------------
不完全 | 74,491,250 | 43,770,625 | 360,724,125
同期メソッド | 124,694,500 | 508,333,250 | 972,829,625
アトミック整数 | 46,542,125 | 68,119,375 | 1,696,146,750
※ シングルコア環境については「不完全」でも80%程度(23/30)は
正常終了(カウント=4,000,000)した。