Home → Volano Reports → The Volano Report, May 2003
The Volano Report, May 2003John NeffengerMay 30, 2003 |
This report provides test results of the VolanoMark™ version 2.5 benchmark program on 17 Java virtual machines and four operating systems. VolanoMark is a pure Java server benchmark characterized by long-lasting network connections and high thread counts. Since 1997, VolanoMark has accurately predicted the performance and connection limitations of the various Java platforms for customers running VolanoChat in their production environments.
See the VolanoMark Benchmark page for background information and instructions on how to run these tests yourself. The VolanoMark benchmark creates client connections in groups of 20 and measures the time required by the clients to take turns broadcasting a set of messages to the group. At the end of the test, it reports a score as the average number of messages transferred by the server per second. All tests ran identical copies of VolanoMark 2.5 on identical hardware. Because the tests compare Java version 1.3 and 1.4 virtual machines, the benchmark uses the synchronous Java input and output methods available in both versions and does not use the java.nio
package found only in Java 1.4.
The performance tests were executed over the local loopback interface with the Java command options shown in Figure 2. The operating system was rebooted before each set of tests for a particular Java virtual machine. The client benchmark ran four times, but the VolanoMark server was not restarted before each run of the client benchmark.
Figure 1 shows the final score for each Java platform. Table 1 shows the test results in detail. Each test result is the server throughput in messages per second with 200 concurrent loopback connections. The score is the average of the last three results. Bigger numbers are faster.
Java Platform Test Results Score IBM 1.3.1 Windows 4647 4892 4886 4941 4906 IBM 1.4.0 Linux 4080 4291 4478 4364 4378 Sun 1.3.1 Windows 4160 4325 4365 4390 4360 Sun 1.4.1 Windows 3983 4125 4307 4268 4233 BEA 3.1 Windows 4088 4102 4171 4177 4150 IBM 1.3.1 Linux 3918 4112 4110 4109 4110 Sun 1.3.1 Linux 3727 3851 3873 3882 3869 Blackdown 1.4.1 Linux 3513 3619 3783 3850 3751 Sun 1.4.1 Linux 3296 3364 3540 3414 3439 Sun 1.4.1 Solaris 2835 2937 2947 2963 2949 Sun 1.3.1 Solaris 2595 2665 2699 2697 2687 BEA 7.0 Windows 1820 1817 1815 1818 1817 BEA 8.1 Windows 1464 1556 1649 1650 1618 Blackdown 1.3.1 Linux 1620 1597 1630 1628 1618 Blackdown 1.3.1 FreeBSD 1266 1252 1251 1248 1250 BEA 8.1 Linux Hangs with low CPU usage (~ 6%) Blackdown 1.4.1 FreeBSD HotSpot Virtual Machine Error
BEA JRockit 8.1 on Linux and Blackdown Java 1.4.1 on FreeBSD failed to run the tests, probably due to incompatibility with the operating system versions I chose. BEA JRockit 8.1 is supported on Red Hat Enterprise Linux AS/ES/WS 2.1 (kernel 2.4.9, glibc 2.2.4) but not on the Red Hat Linux 8.0 system I used (with kernel 2.4.18, glibc 2.3.2). BEA JRockit on Linux seems to be much more dependent on specific Linux kernel and glibc versions than the Java ports for Linux from Blackdown, IBM, and Sun. The Blackdown Java ports are written for Linux, so it is not too surprising that the Java 1.4.1 port is not yet working under the Linux binary compatibility of FreeBSD.
- BEA 3.1 Windows
- -Xgc:gencopy -Xthinthreads -Xmx64m
- BEA 7.0 Windows
- -Xgc:gencopy -Xthinthreads -Xmx64m
- BEA 8.1 Linux
- -Xgc:gencopy -Xthinthreads -Xmx64m
- BEA 8.1 Windows
- -Xgc:gencopy -Xthinthreads -Xmx64m
- Blackdown 1.3.1 FreeBSD
- -green -Xmx64m
- Blackdown 1.3.1 Linux
- -green -Xmx64m
- Blackdown 1.4.1 FreeBSD
- -server -Xmx64m
- Blackdown 1.4.1 Linux
- -server -Xmx64m
- IBM 1.3.1 Linux
- -Xmx64m
- IBM 1.3.1 Windows
- -Xmx64m
- IBM 1.4.0 Linux
- -Xmx64m
- Sun 1.3.1 Linux
- -server -Xmx64m
- Sun 1.3.1 Solaris
- -server -Xconcurrentio -Xmx64m
- Sun 1.3.1 Windows
- -server -Xmx64m
- Sun 1.4.1 Linux
- -server -Xmx64m
- Sun 1.4.1 Solaris
- -server -Xconcurrentio -Xmx64m
- Sun 1.4.1 Windows
- -server -Xmx64m
The network scalability tests were executed over a 100-Mbps Ethernet cross-over cable connection with the Java command options shown in Figure 4. 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 each run of the client benchmark at increasing connection levels.
Table 2 and Table 3 show the test results in detail. Each test result is the server throughput in messages per second for the corresponding number of concurrent connections, starting with 1,000 connections and increasing by 1,000 up to 10,000 connections. If the Java platform failed to run all ten tests, the error which caused the failure is shown in the last column. Figure 3 shows the final score for each Java platform. The score is the maximum connection level completed without errors. Bigger numbers are better and indicate greater network scalability. The order of the Java platforms is preserved from their performance scores.
Java Platform 1000 2000 3000 4000 5000 IBM 1.3.1 Windows 5473 6234 5132 IBM 1.4.0 Linux Sun 1.3.1 Windows 5263 5482 4282 Sun 1.4.1 Windows 5457 5997 5899 BEA 3.1 Windows 5939 5045 4568 4713 3993 IBM 1.3.1 Linux 4303 Sun 1.3.1 Linux Blackdown 1.4.1 Linux 4306 Sun 1.4.1 Linux 3099 Sun 1.4.1 Solaris 3452 4513 4364 3877 Sun 1.3.1 Solaris 2840 3344 3093 2899 BEA 7.0 Windows 3097 1485 1065 787 579 BEA 8.1 Windows 1311 1664 1064 776 592 Blackdown 1.3.1 Linux 2047 1289 1188 668 789 Blackdown 1.3.1 FreeBSD 1574 901 642 556 577 BEA 8.1 Linux Blackdown 1.4.1 FreeBSD
Java Platform 6000 7000 8000 9000 10000 IBM 1.3.1 Windows IBM 1.4.0 Linux Sun 1.3.1 Windows Sun 1.4.1 Windows BEA 3.1 Windows 4352 3428 3069 3646 3563 IBM 1.3.1 Linux Sun 1.3.1 Linux Blackdown 1.4.1 Linux Sun 1.4.1 Linux Sun 1.4.1 Solaris Sun 1.3.1 Solaris BEA 7.0 Windows 469 349 293 255 224 BEA 8.1 Windows 460 346 292 252 223 Blackdown 1.3.1 Linux 513 451 283 446 246 Blackdown 1.3.1 FreeBSD 437 BEA 8.1 Linux Blackdown 1.4.1 FreeBSD
Java Platform Level Error IBM 1.3.1 Windows 3,000 OutOfMemoryError IBM 1.4.0 Linux 0 Segmentation fault Sun 1.3.1 Windows 3,000 OutOfMemoryError Sun 1.4.1 Windows 3,000 OutOfMemoryError BEA 3.1 Windows 10,000 IBM 1.3.1 Linux 1,000 OutOfMemoryError Sun 1.3.1 Linux 0 OutOfMemoryError Blackdown 1.4.1 Linux 1,000 Hangs (0% CPU) Sun 1.4.1 Linux 1,000 OutOfMemoryError Sun 1.4.1 Solaris 4,000 Segmentation fault Sun 1.3.1 Solaris 4,000 Segmentation fault BEA 7.0 Windows 10,000 BEA 8.1 Windows 10,000 Blackdown 1.3.1 Linux 10,000 Blackdown 1.3.1 FreeBSD 6,000 Hangs (0% CPU) BEA 8.1 Linux 0 Hangs (~ 6% CPU) Blackdown 1.4.1 FreeBSD 0 HotSpot VM Error
- BEA 3.1 Windows
- -Xgc:gencopy -Xthinthreads -Xmx256m -Xss32k
- BEA 7.0 Windows
- -Xgc:gencopy -Xthinthreads -Xmx256m -Xss32k
- BEA 8.1 Linux
- -Xgc:gencopy -Xthinthreads -Xmx256m -Xss32k
- BEA 8.1 Windows
- -Xgc:gencopy -Xthinthreads -Xmx256m -Xss32k
- Blackdown 1.3.1 FreeBSD
- -green -Xmx256m -Xss32k
- Blackdown 1.3.1 Linux
- -green -Xmx256m -Xss32k
- Blackdown 1.4.1 FreeBSD
- -server -Xmx256m -Xss96k
- Blackdown 1.4.1 Linux
- -server -Xmx256m -Xss96k
- IBM 1.3.1 Linux
- -Xmx256m -Xss32k
- IBM 1.3.1 Windows
- -Xmx256m -Xss32k
- IBM 1.4.0 Linux
- -Xmx256m -Xss32k
- Sun 1.3.1 Linux
- -server -Xmx256m -Xss32k
- Sun 1.3.1 Solaris
- -server -Xconcurrentio -Xmx256m -Xss64k
- Sun 1.3.1 Windows
- -server -Xmx256m -Xss32k
- Sun 1.4.1 Linux
- -server -Xmx256m -Xss96k
- Sun 1.4.1 Solaris
- -server -Xconcurrentio -Xmx256m -Xss64k
- Sun 1.4.1 Windows
- -server -Xmx256m -Xss32k
The main trick in getting these Java platforms to handle the required number of threads is to reduce the size of the thread stack with the -Xss option. I generally set the stack size to 32 kilobytes when permitted by the Java virtual machine on startup. Otherwise, I set the stack size to the minimum required by the virtual machine: 64 kilobytes for the HotSpot Server VM on Solaris and 96 kilobytes for the version 1.4.1 HotSpot Server VM on Linux and FreeBSD.
BEA JRockit has a unique High Performance Threading System, also called Thin Threads, which is enabled by the -Xthinthreads option. By mapping all Java threads onto a smaller set of native threads, BEA JRockit is the only Java virtual machine that can scale past the 4,000-connection barrier of VolanoMark on Windows. BEA JRockit developers recommended that I use the -Xgc:gencopy option to select the Generational Copying Garbage Collector, and my own tests have shown it to be the best choice for VolanoMark as well.
Table 5 shows the performance differences between the BEA native and Thin Thread implementations. With the large difference in performance between these two models in JRockit versions 7.0 and 8.1, BEA now forces you to choose between superb network scalability (with Thin Threads) and superb performance (with native threads). With JRockit 3.1, we got both at the same time. Unfortunately, JRockit 3.1 is no longer available from BEA.
Java Platform Threading Test Results Score BEA 3.1 Windows Native 4103 4110 4156 4183 4150 BEA 3.1 Windows Thin 4088 4102 4171 4177 4150 BEA 7.0 Windows Native 3799 3791 3790 3797 3793 BEA 7.0 Windows Thin 1820 1817 1815 1818 1817 BEA 8.1 Windows Native 3791 3786 3794 3777 3786 BEA 8.1 Windows Thin 1464 1556 1649 1650 1618
Server-side Java on Solaris has never quite been the same since Sun switched from the ExactVM in Java version 1.2.2 on Solaris to the HotSpot VM in Java version 1.3 and later. Yet there are some tricks for the HotSpot VM that can help make up the difference. You can find important information and excellent suggestions at the Sun Web site, Performance Documentation for the Java HotSpot VM. In particular, the Solaris HotSpot VM has an option called -Xconcurrentio. It apparently does two things: it enables lightweight process-based (LWP-based) synchronization rather than the Solaris thread-based synchronization, and it disables thread-local allocation buffers (TLABs). LWP-based synchronization is the default in the Java 1.4 HotSpot VM, but must be enabled for the Java 1.3 HotSpot VM. Thread-local allocation buffers are enabled by default only in the Solaris SPARC Edition of the HotSpot Server VM. Note that all tests for this report were performed on the Intel Edition of Solaris.
Table 6 shows the performance differences of the Solaris HotSpot Server VM running with its default threading and synchronization options, using the alternative one-to-one thread library found in /usr/lib/lwp, and specifying the -Xconcurrentio option. The performance results of the Sun version 1.2.2_12 ExactVM on Solaris (native threads, sunwjit) are also included for comparison. The -Xconcurrentio option gives a big performance boost for VolanoMark, with little or no reduction in the network scalability. All combinations of the HotSpot Server VM on Solaris managed to complete the network tests up to 4,000 concurrent connections without errors, while the Sun 1.3.1 Solaris virtual machine with its default threading options completed the tests up to 6,000 concurrent connections.
Java Platform Threading Test Results Score Sun 1.2.2 Solaris Default 3215 3171 3175 3142 3163 Sun 1.3.1 Solaris Default 1779 1799 1882 1786 1822 Sun 1.3.1 Solaris /usr/lib/lwp 2132 2123 2158 2135 2139 Sun 1.3.1 Solaris -Xconcurrentio 2595 2665 2699 2697 2687 Sun 1.4.1 Solaris Default 2619 2797 2799 2817 2804 Sun 1.4.1 Solaris /usr/lib/lwp 2688 2751 2812 2807 2790 Sun 1.4.1 Solaris -Xconcurrentio 2835 2937 2947 2963 2949
When choosing the best Java platform for network servers similar to VolanoMark (and VolanoChat), you can ignore the performance scores. All of the Java platforms which complete the performance test are fast enough to support high-traffic Web sites on recent hardware, such as a 500 MHz Intel Pentium III with 256 megabytes of memory. What matters most is the connection capacity.
At 10,000 connections, BEA JRockit 3.1 on Windows has 14 times the throughput of any other Java platform—by far, the best network scalability I have ever tested. While other Java vendors waited for better threading support in the operating system or new programming interfaces for the application, the JRockit team solved the Java threads problem right where it originated. The results are remarkable, and BEA made a wise purchase.
BEA JRockit 3.1 is no longer available, so the best Java platform today is Blackdown 1.3.1 on Linux. The Blackdown 1.3.1 port scales easily to 10,000 connections, keeping pace with the latest from BEA even without a just-in-time compiler. For years, the Blackdown Project has taken the Sun Java source code and made it better. They provide fixes to bugs that Sun won’t fix; they provide security updates to known vulnerabilities months before the official updates from Sun; and real people provide assistance on a lively mailing list. Finding that level of support from other Java vendors is difficult, even when you’re paying for it. The volunteers at Blackdown are a great asset to the Java community.
The good news is that Dan Kegel’s C10K Problem has been solved in Java 1.3, even when using the original blocking Java input and output methods, and even when using modest hardware. The bad news is that the Java vendors seem to have abandoned that achievement in Java 1.4. Blackdown 1.4.1 no longer offers the -green Classic VM option that allows so many connections with the 1.3.1 release. The BEA High Performance Threading System (Thin Threads) is no longer so highly performing in JRockit versions 7.0 and 8.1 compared to the earlier 3.1 release. Tower Technology, with its fast and scalable TowerJ product, simply went out of business. However, there is still cause for hope. The new I/O model in Java 1.4 allows some server applications to reduce their thread count to single digits; the Native POSIX Thread Library in Red Hat Linux 9 promises to solve the problems of highly-threaded Java applications on Linux once and for all; and of course, increases in hardware performance have made some of these problems simply evaporate. With these changes in hand, Java developers can start making headway in the C100K Problem.
The server machine under test is a Dell OptiPlex GX1p with a 500 MHz Intel Pentium III processor, 512 kilobytes of L2 cache, 384 megabytes of 100 MHz ECC SDRAM, a 3Com EtherLink 10/100 PCI TX NIC (3C905B-TX), and Phoenix ROM BIOS PLUS Version 1.10 A08.
The client side driving the network scalability tests is a Dell OptiPlex GX110 with a 1 GHz Intel Pentium III processor, 256 kilobytes of full-speed L2 cache, 512 megabytes of 100 MHz non-ECC SDRAM, a 3Com EtherLink 10/100 PCI TX NIC (3C905B-TX), and Dell Computer Corporation BIOS A05, 9/18/2000. The client test driver was executed under Microsoft Windows XP Professional Version 5.1.2600 Service Pack 1 Build 2600 running BEA WebLogic JRockit Virtual Machine Build 3.1.5-CROSIS-20020617-1325 with Thin Threads and the Generational Copying Garbage Collector.
Note that the client side must run on a much more powerful system than the server side because it simulates up to 10,000 clients on just one machine and must saturate the server side’s CPU usage.
FreeBSD 4.6-RELEASE with Linux binary compatibility:
FreeBSD gx1p.test.volano.com 4.6-RELEASE FreeBSD 4.6-RELEASE #0: ↪ Tue Jun 11 06:14:12 GMT 2002 murray@builder.freebsdmall.com: ↪ /usr/src/sys/compile/GENERIC i386
Contents of /etc/sysctl.conf:
# Increase file descriptor limits from their default of 5479. kern.maxfiles=15360 kern.maxfilesperproc=10240
Installed the linux_base-7.1_2 port with an emulated Linux roughly equal to Red Hat Linux 7.1 (kernel 2.4.2, glibc 2.2.2):
Linux gx1p.test.volano.com 2.4.2 FreeBSD 4.6-RELEASE #0:
↪ Tue Jun 11 06:14:12 GMT 2002 murray@ i386 unknown
glibc-2.2.2-10
Microsoft Windows 2000 Advanced Server with Service Pack 3:
Microsoft Windows 2000 Advanced Server Version 5.0.2195 Service Pack 3 Build 2195
Optimized the performance for background services (rather than applications) under Start, Settings, Control Panel, System, Advanced, Performance Options, Application response. This change specifies that all programs receive equal amounts of processor resources.
Added the following HKEY_LOCAL_MACHINE registry keys under:
SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters
Name | Type | Default | New Value |
MaxUserPort | REG_DWORD | 5,000 | 65,534 |
TcpMaxDataRetransmissions | REG_DWORD | 5 | 32 |
where:
Red Hat Linux 8.0 (kernel 2.4.18, glibc 2.3.2) with all updates from the Red Hat Network:
Linux gx1p.seattle.volano.com 2.4.18-27.8.0 #1
↪ Fri Mar 14 06:45:49 EST 2003 i686 i686 i386 GNU/Linux
kernel-2.4.18-27.8.0
glibc-2.3.2-4.80.6
Added to /etc/pam.d/login:
session required /lib/security/pam_limits.so
Added to /etc/security/limits.conf:
* soft nofile 1024 * hard nofile 10240
Sun Solaris 8 with all recommended Solaris and J2SE (Java 2 Platform, Standard Edition) Patch Clusters:
SunOS gx1p 5.8 Generic_108529-19 i86pc i386 i86pc
Added to /etc/system:
set rlim_fd_max = 10240 set rlim_fd_cur = 1024
For Microsoft Windows 2000.
java version 1.3 Java(TM) 2 Runtime Environment, Standard Edition ↪ (build "1.3.1_CROSIS-20020620-1430") BEA WebLogic JRockit Virtual Machine ↪ (build 3.1.5-CROSIS-20020617-1325)
For Red Hat Linux Advanced Server 2.1 (kernel 2.4.9, glibc 2.2.4).
ERROR: The pthread library is unknown. Are you running a supported Linux distribution?
For Microsoft Windows 2000 with Service Pack 2.
java version "1.3.1_06" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_06) BEA WebLogic JRockit(R) Virtual Machine ↪ (build 7.0sp2-1.3.1_06-win32-GARAK-20030130-0938, ↪ Thin Threads, Generational Copying Garbage Collector)
For Red Hat Enterprise Linux AS/ES/WS 2.1 (kernel 2.4.9, glibc 2.2.4).
java version "1.4.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02) BEA WebLogic JRockit(R) Virtual Machine ↪ (build 8.1-1.4.1_02-linux32-borg.appeal.se-20030320-1059, ↪ Thin Threads, Generational Copying Garbage Collector)
For Microsoft Windows 2000 with Service Pack 2 or higher.
java version "1.4.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02) BEA WebLogic JRockit(R) Virtual Machine ↪ (build 8.1-1.4.1_02-win32-CROSIS-20030320-1110, ↪ Thin Threads, Generational Copying Garbage Collector)
For systems running Linux kernel version 2.2.16 or newer and glibc version 2.1.3 or newer.
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition
↪ (build Blackdown-1.3.1-02b-FCS)
Classic VM (build Blackdown-1.3.1-02b-FCS, green threads, nojit)
Modified /usr/local/j2sdk1.3.1/bin/.java_wrapper by changing expr
in the following two lines:
link=`expr "${ls}" : '.*-> \(.*\)$'` if expr "${link}" : '/' > /dev/null; then
to the Linux-compatible version, /usr/compat/linux/usr/bin/expr.
For systems running Linux kernel version 2.2.16 or newer and glibc version 2.1.3 or newer.
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition
↪ (build Blackdown-1.3.1-02b-FCS)
Classic VM (build Blackdown-1.3.1-02b-FCS, green threads, nojit)
For Linux kernel version 2.4.18 or newer and glibc version 2.2.5 or newer.
Java HotSpot(TM) Server VM warning: Cannot read /proc/self/stat. # # HotSpot Virtual Machine Error, Internal Error # Please report this error at # http://www.blackdown.org/cgi-bin/jdk # # Java VM: Java HotSpot(TM) Server VM (Blackdown-1.4.1-01 mixed mode) # # Error ID: 4F533F4C494E55580E4350500334 # Abort trap - core dumped
For Linux kernel version 2.4.18 or newer and glibc version 2.2.5 or newer.
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition
↪ (build Blackdown-1.4.1-01)
Java HotSpot(TM) Server VM (build Blackdown-1.4.1-01, mixed mode)
For Red Hat Linux 7.1, 7.2, 7.3, 8.0, and Red Hat Linux Advanced Server.
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1)
Classic VM (build 1.3.1, J2RE 1.3.1 IBM build cxia32131-20021102
↪ (JIT enabled: jitc))
For Microsoft Windows 2000 Professional with Service Pack 2 or higher, and Windows XP Professional.
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1)
Classic VM (build 1.3.1, J2RE 1.3.1 IBM Windows 32 build
↪ cn131-20021107 (JIT enabled: jitc))
For Red Hat Linux 7.3 and Red Hat Linux Advanced Server.
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0)
Classic VM (build 1.4.0, J2RE 1.4.0 IBM build cxia32140-20020917a
↪ (JIT enabled: jitc))
For Linux kernel version 2.2.12 and glibc version 2.1.2-11 or later, with specific support for Red Hat Linux 6.2. Also tested on Red Hat Linux 6.1 and 7.1.
java version "1.3.1_07" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_07-b02) Java HotSpot(TM) Server VM (build 1.3.1_07-b02, mixed mode)
For Solaris 2.6, Solaris 7, Solaris 8, and Solaris 9 Operating Environments with the full set of required patches.
java version "1.3.1_07" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_07-b02) Java HotSpot(TM) Server VM (build 1.3.1_07-b02, mixed mode)
For Microsoft Windows 95, 98 (1st or 2nd edition), NT 4.0 with Service Pack 5, ME, 2000 Professional, 2000 Server, 2000 Advanced Server, and XP operating systems.
java version "1.3.1_07" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_07-b02) Java HotSpot(TM) Server VM (build 1.3.1_07-b02, mixed mode)
For Linux kernel version 2.2.12 and glibc version 2.1.2-11 or later. Also tested on Red Hat Linux 7.2 (kernel 2.4.9-31) and Red Hat Linux 7.3 (kernel 2.4.18, glibc 2.2.5).
java version "1.4.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06) Java HotSpot(TM) Server VM (build 1.4.1_02-b06, mixed mode)
For Solaris 7, Solaris 8, and Solaris 9 Operating Environments with the full set of required patches.
java version "1.4.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06) Java HotSpot(TM) Server VM (build 1.4.1_02-b06, mixed mode)
For Microsoft Windows 98 (1st or 2nd edition), NT 4.0 (with Service Pack 5 or later), ME, XP, and 2000 (with Service Pack 2 or later).
java version "1.4.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06) Java HotSpot(TM) Server VM (build 1.4.1_02-b06, mixed mode)
Copyright © 2003 John Neffenger. VOLANO is a trademark of Volano Software registered in the United States and Canada. JAVA is a trademark or registered trademark of Sun Microsystems, Inc., in the United States and other countries. John Neffenger is independent of Sun Microsystems, Inc.
Save as US Letter (PDF), A4 Paper (PDF), E-book (PDF), E-text (UTF-8).