The class data sharing feature is aimed at reducing application startup time and footprint. The installation process loads a set of classes from the system jar file into a private, internal representation, then dumps that representation to a shared archive file. During subsequent JVM invocations, the shared archive is memory-mapped in, saving the cost of loading those classes and allowing much of the JVM's metadata for these classes to be shared among multiple JVM processes. For more information, refer to the documentation at http://java.sun.com/j2se/1.5.0/docs/guide/vm/class-data-sharing.html.
The parallel collector has been enhanced to monitor and adapt to the memory needs of the application. You can specify performance goals for applications and the JVM will tune the size of the Java heap to meet those performance goals with the smallest application footprint consistent with those goals. The goal of this adaptive policy is to eliminate the need to tune command-line options to achieve the best performance. For a synopsis of garbage collection features, refer to the documentation at http://java.sun.com/j2se/1.5.0/docs/guide/vm/gc-ergonomics.html.
At application startup, the launcher can attempt to detect whether the application is running on a server-class machine. Refer to the documentation at http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html.
Thread priority mapping has changed somewhat allowing Java threads and native threads that do not have explicitly set priorities to compete on an equal footing. Refer to the documentation at http://java.sun.com/j2se/1.5.0/docs/guide/vm/thread-priorities.html.
The fatal error reporting mechanism has been enhanced to provide improved diagnostic output and reliability.
The method System.nanoTime() has been added, providing access to a nanosecond-granularity time source for relative time measurements. The actual precision of the time values returned by System.nanoTime() is platform-dependent.