Virtual Machine (VM) Versions
I have focused on the Sun VMs, as there is enough variation within
these to show interesting results. I have shown the time variation
across different VMs for many of the tests. However, your main focus
should be on the effects that tuning has on any one VM, as this
identifies the usefulness of a tuning technique. Differences between
VMs are interesting, but are only indicative and need to be verified
for your specific application. Where I have shown the results of
timed tests, the VM versions I have used are:
- 1.1.8
-
Version 1.1.x VMs do less VM-level work than later Java 2 VMs, so I
have used a 1.1.x VM that includes a just-in-time (JIT) compiler.
Version 1.1.8 was the most recently updated 1.1 JVM available for my
tests. Version 1.1.8 supports running with and without a JIT. The
default is with a JIT, and this is the mode used for all measurements
in the book.
- 1.2.2
-
I have used the 1.2.2 JDK for the 1.2 tests. Java 2 VMs have more
work to do than prior VMs because of additional features such as
Reference objects, and 1.2.2 was the most recently updated 1.2 JVM
available for my tests. Version 1.2 supports running with and without
a JIT. The default is with a JIT, and this is the mode used for all
measurements in the book.
- 1.3.1_02
-
I have used the 1.3.1_02 release for the 1.3 tests. Version 1.3
supports running in interpreted mode, with HotSpot technology for the
client (mixed mode) and for the server (server mode). Version 1.3
does not support a pure JIT mode. Tests labeled
"1.3.1" use the default client-mode
HotSpot technology, and tests labeled "1.3.1
-server" use the server-mode HotSpot technology. For
the server-mode tests, I recorded the test times after the JIT
generated code, i.e., the second run of tests. These times are more
representative of how server-mode JVMs are used.
- 1.4
-
I have used the 1.4.0 release for the 1.4 tests. Tests labeled
"1.4" use the default client-mode
HotSpot technology, tests labeled "1.4
-server" use the server-mode HotSpot technology, and
tests labeled "1.4 -Xint" use the
interpreted mode (i.e., no JIT compilation at all). The 1.4.0 release
had a few performance problems with the server mode, and Sun
engineering kindly provided me with a 1.4.1 prerelease version of the
server-mode JVM on which to run my tests. In addition,
I've used the -Xbatch option to
ensure that all the HotSpot compilation takes place in the first run
through any tests, and I've recorded the second run
times. These times are more representative of how server-mode JVMs
are used. I do not recommend using -Xbatch in
general, unless you know definitely that the first runthrough of the
application can be much slower without affecting user expectations.
|