The tests presented in this report look at the performance and network scalability of 11 Java virtual machines on six operating systems using a common Intel hardware platform running VolanoMark™ 2.1. VolanoMark attempts to answer two questions about Java virtual machines used in network server environments -- especially those environments involving a large number of active socket connections:
When run at high connection counts, VolanoMark essentially measures the consequences of omitting non-blocking input/output operations from the Java platform, as summarized by this Java Developer Connection request for enhancement (free registration required):
For background information and download locations, please see the Java Benchmarks page on Volano's Web site.
The performance test was executed with the following commands on a local loopback connection, using the heap size options shown below where possible:
java -ms8m -mx64m COM.volano.Main
java -ms8m -mx64m COM.volano.Mark -count 100
The operating system was rebooted before each set of tests for a particular Java virtual machine, and the first test result was discarded. The server side was restarted before each run of the client benchmark. The final score is the average of the best two out of three subsequent results.
Scores are the throughput of the server in messages per second. Bigger numbers are faster. See the Environments section for details on the hardware platform, operating systems, and Java virtual machine environments.
Java Platform | Score |
---|---|
Tower TowerJ 3.0.1 Linux IBM JDK 1.1.7 OS/2 IBM JDK 1.1.7 Windows Sun HotSpot 1.0 Windows Microsoft SDK 3.2 Windows Sun JDK 1.2.1 Windows Novell JDK 1.1.5 NetWare Sun JDK 1.2 Solaris Transvirtual Kaffe 1.0b4 Linux Blackdown JDK 1.1.7 Linux JDK 1.1.7 FreeBSD |
1899 1841 1660 1435 1400 1346 1218 883 379 264 172 |
Java Platform | Operating System | Results | Score |
---|---|---|---|
Tower TowerJ 3.0.1 Linux | Red Hat Linux 6.0 Intel | 1897, 1900, 1893 | 1899 |
IBM JDK 1.1.7 OS/2 | OS/2 Warp Server for e-business | 1849, 1777, 1833 | 1841 |
IBM JDK 1.1.7 Windows | Windows NT Workstation 4.0 | 1652, 1664, 1656 | 1660 |
Sun HotSpot 1.0 Windows | Windows NT Workstation 4.0 | 1398, 1444, 1425 | 1435 |
Microsoft SDK 3.2 Windows | Windows NT Workstation 4.0 | 1408, 1391, 1388 | 1400 |
Sun JDK 1.2.1 Windows | Windows NT Workstation 4.0 | 1344, 1344, 1348 | 1346 |
Novell JDK 1.1.5 NetWare | NetWare 5 | 1216, 1216, 1220a | 1218 |
Sun JDK 1.2 Solaris | Solaris 7 Desktop Intel Platform Edition | 881, 885, 827 | 883 |
Transvirtual Kaffe 1.0b4 Linux | Red Hat Linux 6.0 Intel | 378, 380, 371 | 379 |
Blackdown JDK 1.1.7 Linux | Red Hat Linux 6.0 Intel | 264, 264, 262 | 264 |
JDK 1.1.7 FreeBSD | FreeBSD 3.1-RELEASE | 171, 172, 171 | 172 |
"java.net.SocketException: Bad file number"
36
times on the third run, but the test completed successfully.
The network scalability test was executed with the following commands over an isolated 10-Mbps Ethernet connection with a 10-Mbps hub, using the heap and stack size options shown below where possible:
java -ms8m -mx128m -ss32k COM.volano.Main
java -ms8m -mx128m -ss32k COM.volano.Mark -host xxx.yyy.zzz -rooms 15
java -ms8m -mx128m -ss32k COM.volano.Mark -host xxx.yyy.zzz -rooms 30
...
java -ms8m -mx128m -ss32k COM.volano.Mark -host xxx.yyy.zzz -rooms 105
See the COM.volano.Mark command synopsis for a complete description of all options.
The client test driver was executed under the IBM JDK 1.1.7 Java virtual machine using Windows NT 4.0 on a 200-MHz Intel Pentium Pro with a 256-kilobyte L2 cache and 256 megabytes of RAM. The operating systems on both sides were rebooted before each set of tests for a particular Java virtual machine. The VolanoMark server was not restarted between client test runs except where noted.
Scores are the throughput of the server in messages per second based on the total number of concurrent connections. Bigger numbers are faster. See the Environments section for details on the hardware platform, operating systems, and Java virtual machine environments.
300 | 600 | 900 | 1200 | 1500 | 1800 | 2100 | |||
---|---|---|---|---|---|---|---|---|---|
|
Java Platform | 300 | 600 | 900 | 1200 | 1500 | 1800 | 2100 | Limit |
---|---|---|---|---|---|---|---|---|
Tower TowerJ 3.0.1 Linux | 2661 | 2387 | 2206 | ----h | ---- | ---- | ---- | 1014 |
IBM JDK 1.1.7 OS/2 | 2157 | 1901 | 473 | ----a | ---- | ---- | ---- | 1102 |
IBM JDK 1.1.7 Windows | 2535 | 2181 | 1753 | 1499 | 1452 | 755c | 498c | ~ 3600 |
Sun HotSpot 1.0 Windows | 2260 | 2081 | ----a | ---- | ---- | ---- | ---- | 899 |
Microsoft SDK 3.2 Windows | 2367 | 1927 | 1529 | 1203 | 973 | 697 | 552 | ~ 3600 |
Sun JDK 1.2.1 Windows | 2404 | 1788 | 1516 | ----a | ---- | ---- | ---- | 922 |
Novell JDK 1.1.5 NetWare | 2487 | 2014 | 1844 | 1293 | 1505 | ----d | ---- | ~ 1500 |
Sun JDK 1.2 Solaris | 1612 | 1513 | 1448 | 1385 | 1321 | 1248 | 1184 | ~ 4000 |
Transvirtual Kaffe 1.0b4 Linux | 897 | 732 | 600 | ----e | ---- | ---- | ---- | 1016 |
Blackdown JDK 1.1.7 Linux | 324 | 172 | 149 | ----f | ---- | ---- | ---- | 1016 |
JDK 1.1.7 FreeBSD | 296 | 189 | 122 | ----g | ---- | ---- | ---- | 1023 |
"java.lang.OutOfMemoryError"
.
"java.net.SocketException: accept: Invalid
argument"
.
"java.net.SocketException: Socket read failed: 10055"
and
"java.net.SocketException: Connection shutdown"
. Restarted
the server and it worked on the second try.
"java.io.IOException: Too many open files"
.
"java.net.SocketException: Too many open files"
.
"java.net.SocketException: Too many open files in system"
.
"java.net.SocketException: accept: Too many open files"
.
The following tests compare VolanoMark 2.1.2, JDK 1.2, and Solaris 7 on two different hardware architectures:
Java Platform | Score |
---|---|
Sun JDK 1.2 Solaris SPARC Sun JDK 1.2 Solaris Intel |
1653 883 |
Java Platform | Operating System | Results | Score |
---|---|---|---|
Sun JDK 1.2 Solaris SPARC | Solaris 7 Desktop SPARC Platform Edition | 1473, 1613, 1693 | 1653 |
Sun JDK 1.2 Solaris Intel | Solaris 7 Desktop Intel Platform Edition | 881, 885, 827 | 883 |
300 | 600 | 900 | 1200 | 1500 | 1800 | 2100 | |
---|---|---|---|---|---|---|---|
|
Java Platform | 300 | 600 | 900 | 1200 | 1500 | 1800 | 2100 | Limit |
---|---|---|---|---|---|---|---|---|
Sun JDK 1.2 Solaris SPARC | 2631 | 2311 | 2130 | 1894 | 1780 | 1628 | 1488 | ~ 4000 |
Sun JDK 1.2 Solaris Intel | 1612 | 1513 | 1448 | 1385 | 1321 | 1248 | 1184 | ~ 4000 |
All tests ran identical copies of VolanoMark 2.1.2 on identical hardware—a 200-MHz Intel Pentium Pro processor with a 256-kilobyte L2 cache and 256 megabytes of RAM.
"version 3.0.1.0 x86-linux"
TowerJ_3_0_1_0_x86_linux.class
(13,116,025
bytes).
-Dtowerj.poll
to increase
the network scalability on Linux.
Main.tj
and
Mark.tj
.
14.039F_UNI
)
"JDK 1.1.7A IBM build o117-19990506 (JIT enabled: javax)"
runtime.exe
update (5,540,519 bytes)
on top of the Java runtime shipped with OS/2 Warp Server for e-business.
javax
just-in-time compiler.
CONFIG.SYS
file to increase the thread
limit from 1024 to 4095 (THREADS=4095)
and the initial swap
file size from 2 MB to 32 MB
(SWAPPATH=C:\OS2\SYSTEM 2048 32768)
.
"JDK 1.1.7 IBM build n117p-19990128 (JIT enabled: ibmjitc)"
ibm117gm.exe
(10,132,439 bytes).
ibmjitc
just-in-time compiler.
HotSpot VM (1.0fcs, mixed mode, build E)
.
hotspot1_0-win.zip
(1,622,666 bytes).
"X"
, and the stack options are not available.
5.00.3177
MSJavx86.exe
(6,631,656 bytes) and
ClassR.exe
(1,593,064 bytes).
"JDK-1.2.1-A"
jdk1_2_1-win.exe
(20,514,654 bytes).
symcjit
Symantec
Just-in-Time compiler.
"X"
, and the stack options are not available.
"1.1.5"
(JVM dated 01/08/99)
jvm.exe
(18,107,065 bytes).
symcjit
just-in-time compiler
(Symantec Java! JustInTime Compiler Version 3.00.040(x) for JDK 1.1.x).
java.cfg
file to enable the just-in-time
compiler (JAVA_COMPILER=symcjit)
.
"Solaris_JDK_1.2_01"
Solaris_JDK_1.2_01_i386.tar.Z
(26,165,449 bytes).
sunwjit
just-in-time compiler.
"X"
.
rlim_fd_max
variable in
/etc/system
.
"Engine: Just-in-time Version: 1.0b4 Java Version: 1.1"
kaffe-1.0.b4-2
package shipped with Red Hat Linux 6.0.
jthreads
user-level threads and kaffe.jit
just-in-time compiler.
"Linux_JDK_1.1.7B_v3_green_threads"
jdk_1.1.7-v3-glibc-x86.tar.bz2
(10,130,082 bytes).
"jdk1.1.7-FreeBSD:1998/12/21"
jdk1.1.7.V98-12-21.tar.gz
(12,920,606 bytes).