## Virtual Machine Enhancements in J2SE 1.4.x

### Enhancements in J2SE 1.4.2

- Runtime Performance

  The following are enhancements to runtime performance in 1.4.2. Also see Virtual Machine release notes for issues.

  - The interpreter-only Itanium version of 1.4.1 has been enhanced by the addition of the server compiler. Performance is up to thirty times faster than for 1.4.1.

  - The performance of applications that make heavy use of Class.forName and related methods has been significantly improved.

  - Java Native Interface usage checking via the -Xcheck:jni switch is more extensive and robust than in 1.4.1.

  - Third-party memory managers now work properly when using JVMPI and JVMDI.

- Client HotSpot Compiler

  The following are enhancements to the client HotSpot compiler in 1.4.2. Also see Virtual Machine release notes for issues.

  - Improvements in compile speed and footprint.

- Server HotSpot Compiler

  The following are enhancements to the server HotSpot compiler in 1.4.2. Also see Virtual Machine release notes for issues.

  - Use of SSE and SSE2 instructions on IA32 platforms when they are supported by the processor and operating system.

  - Faster integer division by constants.

  - Faster floating-point division by powers of 2.

  - Faster NullPointerException handling.

### Enhancements in J2SE 1.4.1

- J2SE 1.4.1 is available in versions that support the 64-bit Intel Itanium processor on Linux Red Hat 7.2 and Windows XP 64-bit edition. Look for the downloads for these versions on the J2SE 1.4.1 download page.

  In this release, these 64-bit versions have the following limitations.

  - Applications can be run only in interpreted mode. The platform will run in interpreted mode by default, with no need to supply the `-Xint` flag on the command line when launching an application. When using the 64-bit versions of the J2SE 1.4.1 platform, the command `java MyApp` will launch and execute MyApp by interpreting the bytecode. Java HotSpot-technology-based dynamic compilers for 64-bit support is planned for a future release of the J2SE platform.
  - The 64-bit versions of J2SE 1.4.1 do not include the Java Plug-in and Java Web Start products.
  - The 64-bit versions of J2SE 1.4.1 do not have an installer application. These versions are available only as a tar bundle.
  The 32-bit versions of the J2SE 1.4.1 will not work on Intel Itanium machines.

- A deadlock detection utility has been added to the Java HotSpot VM. The utility is invoked by a Ctrl+\ on the command line while an application is running. The utility detects Java-platform-level deadlocks, including locking done from the Java Native Interface (JNI), the Java Virtual Machine Profiler Interface (JVMPI), and Java Virtual Machine Debug Interface (JVMDI).

  When invoked, the utility displays a thread dump to standard out and indicates any Java-platform-level deadlocks it detects. Refer to this sample output. If the application is deadlocked because two or more threads are involved in a cylce to acquire monitors, then the list of such threads and monitors involved in the deadlocks are displayed. Note, however, that this will not find deadlocks involving threads waiting on monitors on which no signal will be forthcoming.

### Enhancements in J2SE 1.4.0

- Signal chaining

- Error-reporting mechanism

- The new `-Xloggc:`file option reports on each garbage-collection event, as with `-verbose:gc`, but logs this data to file. In addition to the information `-verbose:gc` provides, each reported event is preceeded by the time (in seconds) since the first garbage-collection event.

- Beginning with J2SDK 1.4.0, the Classic Virtual Machine is no longer shipped as part of the Java 2 SDK. (On Solaris platforms, the Classic VM was removed in J2SDK 1.3.0.) If you have been running your applications on the Classic VM by using the `-classic` command-line option, you will need to use either the Java HotSpot Client VM (invoked by default or by using the `-client` option) or Java HotSpot Server VM (invoked with the `-server` option). Attempting to launch an application with the `-classic` option will result in this message: `Error: Classic VM no longer supported`.

- The SolarisTM-SPARCTM platform edition of J2SDK 1.4.0 will support 64-bit operation on 64-bit Sparc-v9 platforms when using the Java HotSpot Server VM. With a 64-bit address space, more than four gigabytes of heap memory is available. The Java HotSpot Server VM includes support for both 32-bit and 64-bit operations, and users can select either 32-bit or 64-bit operation by using command-line flags `-d32` or `-d64`, respectively.
  - Users of the Java Native Interface will need to recompile their code to be able to run it on the 64-bit VM.
  - There is no 64-bit support for the Java HotSpot Client VM. Only the Java HotSpot Server VM provides for optional 64-bit operation.
  - Users must install 64-bit Solaris support in order to run the virtual machine in 64-bit mode.
  - On older Sparcv9 systems, users must modify the file `/platform/sun4u/boot.conf` in order to enable 64-bit programs. See the text in the `boot.conf` file for more information.

- The new `-Xcheck:jni` command-line option performs additional checks for Java Native Interface (JNI) functions. Specifically, the Java Virtual Machine validates the parameters passed to the JNI function as well as the runtime environment data before processing the JNI request. Any invalid data encountered indicates a problem in the native code, and the Java Virtual Machine will terminate with a fatal error in such cases. Expect a performance degradation when this option is used.

- The J2SE 1.4.0 platform accepts class file versions in the range 45.3 to 48.0.