Java Performance On Various Platforms

Java Performance On Various Platforms

(This page used to be titled "Speed of Java", but then I realized that this is incorrect in English, so I changed it to "Java Performance" to help Google to find it.)

I tried to evaluate what would be the best machine to buy for a Java application. When I was looking for some benchmark results on the Internet, I have found that there are not any which can be used to directly compare similar machines with different OS and CPU.

The famous Volano benchmark published results of JVMs running on Intel IA-32 hardware only. The SPEC JBB200 recent results compare 32-CPU IBM servers against 112-CPU SUN servers and the like, which is not very helpful either. To run it yourself, you have to pay $400 for the test.

SciMark

So I have found a benchmark SciMark and run it on as many platforms as I could. The results are here:

SciMark normal results MFlops Operating system JVM CPU
960.7
Linux 2.6.22 64-bit SUN 1.6.0_12 64-bit -server 2x Intel Quad-Core Xeon E5472 3 GHz
946.0
Linux 2.6.22 64-bit IBM 1.6.0SR3 64-bit 2x Intel Quad-Core Xeon E5472 3 GHz
895.7
Linux 2.6.22 64-bit SUN 1.6.0_06 64-bit -server 2x Intel Quad-Core Xeon E5472 3 GHz
956.5
Windows Vista 64-bit SUN 1.6.0_14b02 64-bit -server 1x Intel Core 2 Duo E8400 3GHz
956.1
Linux 2.6.27 64-bit SUN 1.6.0_11 64-bit -server 1x Intel Core 2 Duo E8400 3GHz
951.7
Linux 2.6.27 64-bit IBM 1.6.0SR3 64-bit 1x Intel Core 2 Duo E8400 3GHz
932.2
Windows Vista 64-bit SUN 1.6.0_14b02 32-bit -server 1x Intel Core 2 Duo E8400 3GHz
922.5
Linux 2.6.27 64-bit OpenJDK 1.6.0_0-b11 64-bit -server 1x Intel Core 2 Duo E8400 3GHz
891.7
Linux 2.6.27 64-bit SUN 1.6.0_11 32-bit -server 1x Intel Core 2 Duo E8400 3GHz
890.7
Windows Vista 64-bit SUN 1.6.0_12 32-bit -server 1x Intel Core 2 Duo E8400 3GHz
584.9
Linux 2.6.27 64-bit SUN 1.6.0_11 32-bit -client 1x Intel Core 2 Duo E8400 3GHz
584.0
Windows Vista 64-bit SUN 1.6.0_12 32-bit -client 1x Intel Core 2 Duo E8400 3GHz
943
Linux 2.6.22 64-bit IBM 1.6.0 64-bit 2x Intel Dual-Core Xeon 5160 3GHz
898.0
Linux 2.6.22 64-bit SUN 1.6.0_06 64-bit -server 2x Intel Dual-Core Xeon 5160 3GHz
889
Linux 2.6.18 64-bit SUN 1.6.0 32-bit -server 2x Intel Dual-Core Xeon 5160 3GHz
866
Linux 2.6.18 64-bit gcj 4.0.2 -O3 --no-bounds-check -march=nocona 2x Intel Dual-Core Xeon 5160 3GHz
815
Linux 2.6.18 64-bit SUN 1.5.0_11 32-bit -server 2x Intel Dual-Core Xeon 5160 3GHz
642.8
Linux 2.6.18 64-bit SUN 1.6.0 64-bit -server 2x Intel Dual-Core Xeon 5160 3GHz
633
Linux 2.6.18 64-bit IBM 1.5.0 32-bit 2x Intel Dual-Core Xeon 5160 3GHz
576.3
Linux 2.6.18 64-bit SUN 1.5.0_11 64-bit -server 2x Intel Dual-Core Xeon 5160 3GHz
568
Linux 2.6.18 64-bit SUN 1.6.0 32-bit -client 2x Intel Dual-Core Xeon 5160 3GHz
523
Linux 2.6.18 64-bit gcj 4.0.2 2x Intel Dual-Core Xeon 5160 3GHz
801.7
Linux 2.6.22 64-bit IBM 1.6.0 64-bit AMD64 8x Dual-Core Opteron 8222 3GHz
762.0
Linux 2.6.22 64-bit SUN 1.6.0_06 64-bit -server AMD64 8x Dual-Core Opteron 8222 3GHz
742.2
Linux 2.6.22 64-bit SUN 1.6.0_06 32-bit -server AMD64 8x Dual-Core Opteron 8222 3GHz
563.6
Linux 2.6.22 64-bit SUN 1.6.0_06 32-bit -client AMD64 8x Dual-Core Opteron 8222 3GHz
780.8
Linux 2.6.18 64-bit SUN 1.6.0 32-bit -server 2x Intel Xeon Quad-Core X5355 2.6 GHz
650.3
Linux 2.6.18 64-bit SUN 1.6.0beta2 64-bit -server AMD64 8x Dual-Core Opteron 885 2.6GHz
620.5
Linux 2.6.18 64-bit SUN 1.5.0_09 64-bit -server AMD64 8x Dual-Core Opteron 885 2.6GHz
564
Linux 2.6.18 64-bit SUN 1.6.0 32-bit -server AMD64 8x Dual-Core Opteron 885 2.6GHz
605
Linux 2.6.18 64-bit SUN 1.6.0_06 64-bit -server AMD64 1x Dual-Core Opteron 280 2.4GHz
573.09
Linux 2.6.5 64-bit Blackdown 1.4.2-rc1 64-bit -server AMD 64 FX-53 2.4GHz
563.1
Linux 2.6.5 64-bit SUN 1.5.0_01 64-bit (appletviewer) AMD 64 FX-53 2.4GHz
560
Linux 2.6.5 64-bit SUN 1.5.0 64-bit (appletviewer) AMD 64 FX-53 2.4GHz
545
Linux 2.6.5 64-bit IBM 1.4.2 64-bit (max 576?) AMD 64 FX-53 2.4GHz
561.94
WinXP SUN 1.5.0-rc -server Pentium4 3GHz (w/o HT) (800FSB DualCh. mem)
556.49
Linux 2.6.8 SUN 1.5.0-rc -server (w/o X-window) Pentium4 3GHz (w/o HT)
548.36
Linux 2.6.8 SUN 1.5.0-rc -server (appletviewer) Pentium4 3GHz (w/o HT)
547.67
WinXP SUN 1.4.2_03 -server Pentium4 3GHz (w/o HT)
544.24
Linux 2.6.8 SUN 1.5.0-rc -server (w/o X-window) Pentium4 3GHz HT
536
WinXP SUN 1.4.2_03 -server Pentium4 3GHz HT
529.00
Linux 2.6.5 gcj 3.4.0 -march=pentium4 -O3 --no-bounds-check Pentium4 3GHz (w/o HT)
499.61
Linux 2.6.8 IBM 1.4.2 Pentium4 3GHz (w/o HT)
412.04
WinXP IBM 1.4.2 Pentium4 3GHz (w/o HT)
389
WinXP BEA JRockit 1.4.2_04 Pentium4 3GHz (w/o HT)
376.9
Linux 2.6.5 BEA JRockit 1.4.2_04 Pentium4 3GHz (w/o HT)
308.72
Linux 2.6.5 gcj 3.3.3 -march=pentium4 -O3 Pentium4 3GHz (w/o HT)
558.45
Linux 2.4.27 SUN 1.5.0-rc -server Xeon P4 3.06GHz HT
544.92
Linux 2.4.23 Blackdown 1.4.2-rc1 -server Xeon P4 3.06GHz HT
539.60
Linux 2.4.23 Sun. 1.4.2 -server Xeon P4 3.06GHz HT
537.32
Linux 2.4.23 Sun. 1.5.0-beta -server Xeon P4 3.06GHz HT
491.78
Linux 2.4.23 IBM 1.4.1 Xeon P4 3.06GHz HT
340.07
Linux 2.4.23 BEA Systems, Inc. 1.4.1_01 Xeon P4 3.06GHz HT
524.37
Linux 2.6.5 64-bit Blackdown 1.4.2-rc1 64-bit -server Opteron 148 2.2GHz
514.00
Linux 2.6.5 64-bit Blackdown 1.4.2-fcs 64-bit -server Opteron 148 2.2GHz
513.80
Linux 2.6.5 64-bit Sun. 1.5.0 64-bit -server Opteron 148 2.2GHz
513.78
Linux 2.6.5 64-bit Sun. 1.5.0-rc-63b 64-bit -server Opteron 148 2.2GHz
500.1
Linux 2.6.5 64-bit Sun. 1.5.0-beta2 64-bit -server Opteron 148 2.2GHz
497.33
Linux 2.6.5 64-bit IBM 1.4.2 64-bit Opteron 148 2.2GHz
473.12
Linux 2.6.5 64-bit Sun. 1.4.2_03 32-bit -server Opteron 148 2.2GHz
470.00
Linux 2.6.5 64-bit Sun. 1.5.0 32-bit -server Opteron 148 2.2GHz
443.12
Linux 2.6.5 64-bit IBM 1.4.1SR2 32-bit Opteron 148 2.2GHz
443.10
Linux 2.6.5 64-bit IBM 1.4.2SR1 32-bit Opteron 148 2.2GHz
505
Linux 2.6.22 SUN 1.6.0_06 -server Pentium4 2.5GHz
484.9
Linux 2.6.18 SUN 1.6.0 -server Pentium4 2.5GHz
465.82
Linux 2.4.23 Blackdown 1.4.2-rc1 -server Pentium4 2.5GHz
461.60
Linux 2.4.23 Sun. 1.4.2_03 -server Pentium4 2.5GHz
460
Linux 2.4.27 Sun 1.5.0_01 -server Pentium4 2.5GHz
333.00
Linux 2.4.27 IBM 1.4.2SR1 Pentium4 2.5GHz
207.19
Linux 2.4.23 Sun. 1.4.2_03 -client Pentium4 2.5GHz
196.02
Linux 2.4.23 Sun. 1.4.2 -client Pentium4 2.5GHz
422.65
Linux 2.4.21 64-bit Blackdown 1.4.2-rc1 64-bit -server Opteron 244 1.8GHz
412.11
Linux 2.4.21 64-bit Sun. 1.5.0-beta 64-bit -server Opteron 244 1.8GHz
382.95
Linux 2.4.21 64-bit Sun. 1.5.0-beta 32-bit -server Opteron 244 1.8GHz
381.82
Linux 2.4.21 64-bit Blackdown 1.4.2-rc1 32-bit -server Opteron 244 1.8GHz
381.80
Linux 2.4.21 64-bit Sun. 1.4.2_03 32-bit -server Opteron 244 1.8GHz
302.1
WinXP 5.1 SUN 1.5.0_01 -server Pentium M 1.5GHz
225.76
MacOSX 0.3.2 Apple Computer, Inc. 1.4.2_03 powerpc 970, 2 Ghz
222.09
AIX 5.2 IBM 1.3.1 32-bit Power4+ 1.2GHz
219.36
AIX 5.2 IBM 1.4.1 32-bit Power4+ 1.2GHz
214.36
AIX 5.2 IBM 1.4.1 64-bit Power4+ 1.2GHz
160.5
Linux 2.6.5 64-bit BEA JRockit 1.5.0_06 64-bit Itanium2 1.5GHz
146.7
Linux 2.6.9 64-bit BEA JRockit 1.4.2_04 64-bit Itanium2 1.4GHz
138.1
Linux 2.6.9 64-bit SUN 1.4.2_06 64-bit Itanium2 1.4GHz
142.0
Solaris 10 SUN 1.5.0_12 sparcv9 1500 MHz
105.17
Linux 2.4.19 64-bit BEA JRockit 1.4.2_03 64-bit Itanium2 1GHz
96.80
Linux 2.4.19 64-bit Sun. 1.4.2_03 64-bit Itanium2 1GHz
90.51
SunOS 5.8 Sun. 1.4.2_03 -server UltraSPARC-III 750MHz
67.87
MacOSX 0.3.2 Apple Computer, Inc. 1.4.2_03 1 GHz PowerPC G4
48.61
OSF1 V5.1 Compaq Computer 1.4.0 Alpha 667 MHz
43.00
Irix 6.5 SGI JavaVM-1.3 MIPS R12000 400MHz
SciMark large matrix results MFlops Operating system JVM CPU
311.68
Linux 2.6.5 64-bit Blackdown 1.4.2-rc1 64-bit -server AMD 64 FX-53 2.4GHz
282.17
WinXP SUN 1.5.0-rc -server Pentium4 3GHz (w/o HT) 800FSB DualCh. memory
276.47
Linux 2.6.8 SUN 1.5.0-rc -server Pentium4 3GHz (w/o HT)
212.52
Linux 2.6.8 IBM 1.4.2 Pentium4 3GHz (w/o HT)
249.97
Linux 2.4.23 Sun. 1.4.2_03 -server Xeon P4 3.06GHz HT
249.89
Linux 2.4.23 Sun. 1.5.0-beta -server Xeon P4 3.06GHz HT
245.86
Linux 2.4.23 Blackdown 1.4.2-rc1 -server Xeon P4 3.06GHz HT
197.92
Linux 2.4.23 IBM 1.4.1 Xeon P4 3.06GHz HT
188.64
Linux 2.4.23 BEA JRockit80 1.4.1_01 Xeon P4 3.06GHz HT
169.79
Linux 2.4.23 Sun. 1.4.2_03 -client Xeon P4 3.06GHz HT
233.36
Linux 2.6.5 64-bit Sun. 1.5.0-rc-63b 64-bit -server Opteron 148 2.2GHz
227.72
Linux 2.6.5 64-bit Blackdown 1.4.2-rc1 64-bit -server Opteron 148 2.2GHz
222.45
Linux 2.6.5 64-bit Sun. 1.4.2_03 32-bit -server Opteron 148 2.2GHz
218.48
Linux 2.4.23 Sun. 1.5.0-beta -server Pentium4 2.5GHz
212.70
Linux 2.4.23 Blackdown 1.4.2-rc1 -server Pentium4 2.5GHz
210.95
Linux 2.4.23 Sun. 1.4.2_03 -server Pentium4 2.5GHz
171.23
Linux 2.4.23 IBM 1.4.1 Pentium4 2.5GHz
162.58
Linux 2.4.23 BEA JRockit80 1.4.1_01 Pentium4 2.5GHz
132.99
Linux 2.4.23 Sun. 1.4.2_03 -client Pentium4 2.5GHz
171.72
Linux 2.4.25 Sun. 1.5.0-beta 64-bit -server Opteron 244 1.8GHz
168.49
Linux 2.4.25 Blackdown 1.4.2 64-bit -server Opteron 244 1.8GHz
162.32
Linux 2.4.25 Sun. 1.5.0-beta 32-bit -server Opteron 244 1.8GHz
161.83
Linux 2.4.25 Blackdown 1.4.2 32-bit -server Opteron 244 1.8GHz
160.26
Linux 2.4.25 Sun. 1.4.2_03 32-bit -server Opteron 244 1.8GHz
51.50
Linux 2.4.19 Sun. 1.4.2_03 64-bit -server Itanium2 1GHz

WebServices speed

The SciMark benchmark tests mostly floating point operations, so it cannot be used to estimate performance for grid services, where XML stacks and web containers are in play. So I have put together another test.

In this test, a SOAP webservice was deployed into Tomcat 5.0.18 /Axis 1.1 container, and a client called that webservice, sending there and back four JavaBeans and a String array, to simulate some useful content, causing 2.2KB XML messages.

A side note - all these tests were run on so many OSes and CPUs using exactly the same binary, compiled only once. This is a real-life demonstration of "Write Once, Run Everywhere" feature of Java.

webservice SOAP test calls per second stable cycles Operating system Java Virtual Machine implementation CPU
387
120000 Linux 2.6.5 64-bit BEA JRockit 1.4.2_04 32-bit 1x AMD 64 FX-53 2.4GHz
322
4800 Linux 2.6.5 64-bit IBM 1.4.2SR1 32-bit 1x AMD 64 FX-53 2.4GHz
314
6200 Linux 2.6.5 64-bit IBM 1.4.1SR2 32-bit 1x AMD 64 FX-53 2.4GHz
220
2200 Linux 2.6.5 64-bit IBM 1.4.2 64-bit 1x AMD 64 FX-53 2.4GHz
334
80000 Linux 2.6.5 64-bit BEA JRockit 1.4.2_04 32-bit 2x AMD Opteron 244 1.8GHz
243
3600 Linux 2.4.21 64-bit IBM 1.4.1SR1 32-bit 2x AMD Opteron 244 1.8GHz
195
6800 Linux 2.4.21 64-bit SUN 1.5.0-b 32-bit -server -XX:CompileThreshold=1500 2x AMD Opteron 244 1.8GHz
190
7600 Linux 2.4.21 64-bit Blackdown 1.4.2 32-bit -server -XX:CompileThreshold=1500 2x AMD Opteron 244 1.8GHz
183
7200 Linux 2.4.21 64-bit Blackdown 1.4.2 64-bit -server -XX:CompileThreshold=1500 2x AMD Opteron 244 1.8GHz
180
10000 Linux 2.4.21 64-bit SUN 1.5.0-b 32-bit -client 2x AMD Opteron 244 1.8GHz
165
3600 Linux 2.4.21 64-bit SUN 1.4.2_03 32-bit -server -XX:CompileThreshold=1500 2x AMD Opteron 244 1.8GHz
160
4500 Linux 2.4.21 64-bit Blackdown 1.4.2 32-bit -client 2x AMD Opteron 244 1.8GHz
150
13000 Linux 2.4.21 64-bit SUN 1.5.0-b 32-bit -server 2x AMD Opteron 244 1.8GHz
150
9000 Linux 2.4.21 64-bit Blackdown 1.4.2 32-bit -server 2x AMD Opteron 244 1.8GHz
140
9000 Linux 2.4.21 64-bit Blackdown 1.4.2 64-bit -server 2x AMD Opteron 244 1.8GHz
320
95000 Linux 2.6.5 64-bit BEA JRockit 1.4.2_04 32-bit 1x AMD Opteron 148 2.2GHz
266
35000 Linux 2.6.5 64-bit IBM 1.4.1SR2 32-bit 1x AMD Opteron 148 2.2GHz
258
2600 Linux 2.6.5 64-bit IBM 1.4.2 32-bit 1x AMD Opteron 148 2.2GHz
250
4800 Linux 2.6.5 64-bit Blackdown 1.4.2 64-bit -server -XX:CompileThreshold=1500 1x AMD Opteron 148 2.2GHz
238
7200 Linux 2.6.5 64-bit SUN 1.4.2_03 32-bit -server -XX:CompileThreshold=1500 1x AMD Opteron 148 2.2GHz
NullPointerException in SAXParserImpl N/A Linux 2.6.5 64-bit SUN 1.5.0-rc-b63 for AMD64 1x AMD Opteron 148 2.2GHz
NullPointerException in SAXParserImpl N/A Linux 2.6.5 64-bit SUN 1.5.0-rc-b63 for IA32 1x AMD Opteron 148 2.2GHz
311
99000 Linux 2.6.9 ia64 BEA JRockit 1.4.2_04 64-bit 2x Itanium2 1.4GHz
139
3600 Linux 2.6.9 ia64 SUN 1.4.2_06 64-bit -XX:CompileThreshold=1500 2x Itanium2 1.4GHz
115
10400 Linux 2.6.9 ia64 SUN 1.4.2_06 64-bit 2x Itanium2 1.4GHz
96
15000 Linux 2.6.9 ia64 SUN 1.4.2_06 64-bit -Xcomp 2x Itanium2 1.4GHz
279
75000 Linux 2.6.5 BEA JRockit 1.4.2_04 1x Pentium4 3GHz (w/o HT, 800FSB, dualch.mem)
220
3600 Linux 2.6.8 IBM 1.4.2 1x Pentium4 3GHz (w/o HT)
213
2600 WinXP IBM 1.4.2 1x Pentium4 3GHz (w/o HT)
213
9800 WinXP SUN 1.4.2_03 -server -XX:CompileThreshold=1500 1x Pentium4 3GHz (w/o HT)
192
4000 Linux 2.6.8 IBM 1.4.2 1x Pentium4 3GHz HT
244
83000 Linux 2.4.25 ia64 BEA JRockit 1.4.2_04 64-bit 2x Itanium2 1GHz
140
400 Linux 2.4.19 ia64 BEA JRockit 1.4.2_03 64-bit 2x Itanium2 1GHz
80
5000 Linux 2.4.19 ia64 SUN 1.4.2_03 64-bit -server 2x Itanium2 1GHz
239
95000 Linux 2.4.27 BEA JRockit 1.4.2_04 1x Pentium4 2.5GHz
198
4000 Linux 2.4.23 SUN 1.5.0-b -server -XX:CompileThreshold=1500 1x Pentium4 2.5GHz
187
2400 Linux 2.4.23 IBM 1.4.1SR1 1x Pentium4 2.5GHz
182
5000 Linux 2.4.23 SUN 1.4.2_03 -server -XX:CompileThreshold=1500 1x Pentium4 2.5GHz
166
3000 Linux 2.4.23 SUN 1.5.0-b -client 1x Pentium4 2.5GHz
163
400 Linux 2.4.23 BEA JRockit 8.1sp2-1.4.1_05 1x Pentium4 2.5GHz
156
9000 Linux 2.4.23 SUN 1.5.0-b -server 1x Pentium4 2.5GHz
152
400 Linux 2.4.23 BEA JRockit80 1.4.1_01 1x Pentium4 2.5GHz
150
9000 Linux 2.4.23 SUN 1.4.2_03 -server 1x Pentium4 2.5GHz
150
2500 Linux 2.4.23 SUN 1.4.2_03 -client 1x Pentium4 2.5GHz
150
2500 Linux 2.4.23 Blackdown 1.4.2-rc1 -client 1x Pentium4 2.5GHz
145
9000 Linux 2.4.23 Blackdown 1.4.2-rc1 -server 1x Pentium4 2.5GHz
116
400 Linux 2.4.23 BEA JRockit 1.4.2_03 1x Pentium4 2.5GHz
232
100000 Linux 2.4.27 BEA JRockit 1.4.2_04 2x Xeon P4 3.06GHz HT
215
3000 Linux 2.4.23 IBM 1.4.1SR1 2x Xeon P4 3.06GHz HT
210
4600 Linux 2.4.23 SUN 1.5.0-b -server -XX:CompileThreshold=1500 2x Xeon P4 3.06GHz HT
180
4400 Linux 2.4.23 SUN 1.4.2_03 -server -XX:CompileThreshold=1500 2x Xeon P4 3.06GHz HT
175
3000 Linux 2.4.23 SUN 1.5.0-b -client 2x Xeon P4 3.06GHz HT
160
7500 Linux 2.4.23 SUN 1.5.0-b -server 2x Xeon P4 3.06GHz HT
145
9000 Linux 2.4.23 SUN 1.4.2_03 -server 2x Xeon P4 3.06GHz HT
140
2500 Linux 2.4.23 SUN 1.4.2_03 -client 2x Xeon P4 3.06GHz HT
152
2800 MacOSX 0.3.2 Apple 1.4.2-34 -server 2x PowerPC 970 2GHz
141
1800 MacOSX 0.3.2 Apple 1.4.2-34 -client 2x PowerPC 970 2GHz
150
1500 AIX 5.2 IBM 1.4.1 32-bit 2x Power4+ 1.2GHz
115
1500 AIX 5.2 IBM 1.4.0 64-bit 2x Power4+ 1.2GHz
95
1200 OSF1 alpha V5.1 Compaq 1.4.0-1 Fast VM 4x Alpha 667MHz
79
11000 SunOS 5.8 SUN 1.4.2_03-b02 -server -XX:CompileThreshold=1500 2x UltraSPARC-III 750MHz
64
6000 SunOS 5.8 SUN 1.4.2_03-b02 -client 2x UltraSPARC-III 750MHz
13
400 IRIX64 6.5 SGI 1.4.1 -classic 20x MIPS R14000 500 Mhz

Java virtual machine has big overhead when starting, because the HotSpot or Just-In-Time compilers need to analyze and compile bytecode. The number of calls which were performed before the speed stabilized is in the "stable cycles" column of the result table.

This test has one deceiving feature - at the first look, one would expect multiprocesors to have an advantage, because client and server are separate processes. However, the client and the server are roundtriping a set of data, it means that client send a request and waits, server receives the request, generates a response and waits, and so on. Thus only one of the two processes is running at any time, so effectively it is a single thread test. That explains why multiprocessors are not twice faster than uniprocessors.

A very interesting thing is the influence of option -XX:CompileThreshold=1500 to SUN HotSpot JVM. The default is 10000 for Server VM and 1500 for Client VM. However setting it to 1500 for Server VM makes it faster than Client VM. Setting it to 100 actualy lowers the performance. And using option -Xcomp (which means that all code is compiled before usage) gives even lower performance, which is surprising.

The BEA JRockit JVM has a very special behavior in several ways. First, its results are fluctuating widely over time. While other JVMs get to a maximum speed after relatively short number of calls (less than ten thousand) and then the measured times after each 200 calls give stable results, with JRockit this would give results varying as much as 50% for each 200 calls. So I had to use batches of 5000 calls to get stable average of calls per second, but even then it is varying like 10%. Second speciality is that it starts slowly, and it takes very high number of calls, like 100000, to get to its maximum speed. And the third speciality is that it is the only JVM, which runs this single-threaded test faster on two-CPU Opteron 1.8GHz machine than on one-CPU Opteron 2.2GHz. My guess is that this is caused by JRockit's parallel garbage collector, which can take advantage of the second CPU.

gSOAP C implementation

There is another implementation of SOAP in the C language called gSOAP . We can compare equivalent clients and servers against each other. However the comparison is not fair to Java, because Axis is able to create any dynamic SOAP calls, while gSOAP is a preprocessor generating one-purpose code, which can thus be much faster. The graph is scaled down 8 times now.

If you want to run you own tests, download source code , compile for your platform and run. Please send me your results if you have a platform not listed here.

webservice SOAP test with gSOAP and Axis calls per second Operating system client server CPU
1540
Linux 2.4.23 gSOAP 2.5, gcc 2.95.4 -O2 gSOAP 2.5, gcc 2.95.4 -O2 1x Pentium4 2.5GHz
375
Linux 2.4.23 Axis, Java IBM 1.4.1SR1 gSOAP 2.5, gcc 2.95.4 1x Pentium4 2.5GHz
370
Linux 2.4.23 gSOAP 2.5, gcc 2.95.4 Axis, Java SUN 1.5.0-b -server -XX 1x Pentium4 2.5GHz
360
Linux 2.4.23 gSOAP 2.5, gcc 2.95.4 Axis, Java IBM 1.4.1SR1 1x Pentium4 2.5GHz
352
Linux 2.4.23 Axis, Java SUN 1.5.0-b -server -XX gSOAP 2.5, gcc 2.95.4 1x Pentium4 2.5GHz
310
Linux 2.4.23 Axis, Java SUN 1.5.0-b -client gSOAP 2.5, gcc 2.95.4 1x Pentium4 2.5GHz
198
Linux 2.4.23 Axis, Java SUN 1.5.0-b -server -XX Axis, Java SUN 1.5.0-b -server -XX 1x Pentium4 2.5GHz
187
Linux 2.4.23 Axis, Java IBM 1.4.1SR1 Axis, Java IBM 1.4.1SR1 1x Pentium4 2.5GHz

And now gSOAP client against gSOAP server on various platforms:

webservice SOAP test with gSOAP calls per second Operating system gSOAP, compiler CPU
3300
Linux 2.6.16 64-bit gSOAP 2.5, gcc 4.0.2 -O2 64-bit 1x Dual Core AMD Opteron 280 2.4GHz
3241
Linux 2.6.5 64-bit gSOAP 2.5, gcc 3.3.3 -O2 64-bit 1x AMD FX-53 2.4GHz
2990
Linux 2.6.5 64-bit gSOAP 2.7.0c, gcc 3.3.3 -O2 64-bit 1x AMD Opteron 148 2.2GHz
2907
Linux 2.6.5 64-bit gSOAP 2.5, gcc 3.3.3 -O2 64-bit 1x AMD Opteron 148 2.2GHz
2903
Linux 2.6.5 64-bit gSOAP 2.6.2, gcc 3.3.3 -O2 64-bit 1x AMD Opteron 148 2.2GHz
2604
Linux 2.6.5 64-bit gSOAP 2.7.0c, gcc 3.3.3 -O2 32-bit 1x AMD Opteron 148 2.2GHz
2570
Linux 2.6.5 64-bit gSOAP 2.6.2, gcc 3.3.3 -O2 32-bit 1x AMD Opteron 148 2.2GHz
1988
Linux 2.6.5 64-bit gSOAP 2.5, gcc 3.3.3 64-bit 1x AMD Opteron 148 2.2GHz
2340
Linux 2.4.21 64-bit gSOAP 2.5, gcc 3.2.2 -O2 64-bit 2x AMD Opteron 244 1.8GHz
2130
Linux 2.4.21 64-bit gSOAP 2.5, gcc 2.95.4 -O2 32-bit 2x AMD Opteron 244 1.8GHz
2265
Linux 2.6.9 IA-64 gSOAP 2.5, Intel icc 8.1 -O2 2x Itanium2 1.4GHz
2070
Linux 2.6.9 IA-64 gSOAP 2.5, gcc 3.3.5 -O2 2x Itanium2 1.4GHz
1936
Linux 2.6.5 gSOAP 2.5, gcc 3.4.0 -O3 1x Pentium4 3GHz (w/o HT)
1835
Linux 2.6.8 gSOAP 2.5, gcc 3.3.3 -O2 1x Pentium4 3GHz (w/o HT)
1765
Linux 2.4.23 gSOAP 2.5, gcc 2.95.4 -O2 2x Xeon P4 3.06GHz HT
1750
Linux 2.4.23 gSOAP 2.5, gcc 3.3.1 -O2 2x Xeon P4 3.06GHz HT
1600
Linux 2.4.23 gSOAP 2.5, gcc 2.95.4 2x Xeon P4 3.06GHz HT
1530
Linux 2.4.23 gSOAP 2.5, gcc 3.3.1 2x Xeon P4 3.06GHz HT
1590
Linux 2.4.19 IA-64 gSOAP 2.5, Intel ecc 7.0 -O2 2x Itanium2 1GHz
1514
Linux 2.4.19 IA-64 gSOAP 2.5, gcc 2.96 -O2 2x Itanium2 1GHz
1540
Linux 2.4.23 gSOAP 2.5, gcc 2.95.4 -O2 1x Pentium4 2.5GHz
1430
Linux 2.4.23 gSOAP 2.5, gcc 2.95.4 1x Pentium4 2.5GHz
703
AIX 5.2 gSOAP 2.5, gcc 2.9-aix51 -O2 2x Power4+ 1.2GHz
530
SunOS 5.8 gSOAP 2.5, gcc 2.8.1 -O2 2x UltraSPARC-III 750MHz

你可能感兴趣的:(java,linux,gcc,sun,performance)