for an operation, the compiler must copy from register to memory (or memory to register), which takes time (registers are significantly faster to access). However, the server virtual machine used a color-graph allocator and did not have this problem. An optimization of register allocation was introduced in Sun's JDK 6; it was then possible to use the same registers across blocks (when applicable), reducing accesses to the memory. This led to a reported performance gain of about 60% in some benchmarks. Class data sharing Class data sharing (called CDS by Sun) is a mechanism which reduces the startup time for Java applications, and also reduces memory footprint. When the JRE is installed, the installer loads a set of classes from the system JAR file (the JAR file holding all the Java class library, called rt.jar) into a private internal representation, and dumps that representation to a file, called a "shared archive". During subsequent JVM invocations, this 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. The corresponding improvement in start-up time is more obvious for small programs. History of performance improvements Apart from the improvements listed here, each release of Java introduced many performance improvements in the JVM and Java application programming interface (API). JDK 1.1.6: First just-in-time compilation (Symantec's JIT-compiler) J2SE 1.2: Use of a generational collector. J2SE 1.3: Just-in-time compiling by HotSpot. J2SE 1.4: See here, for a Sun overview of performance improvements between 1.3 and 1.4 versions. Java SE 5.0: Class data sharing Java SE 6: Split bytecode verification Escape analysis and lock coarsening Register allocation improvements Other improvements: Java OpenGL Java 2D pipeline speed improvements Java 2D performance also improved significantly in Java 6 See also 'Sun overview of performance improvements between Java 5 and Java 6'. Java SE 6 Update 10 Java Quick Starter reduces application start-up time by preloading part of JRE data at OS startup on disk cache. Parts of the platform needed to execute an application accessed from the web when JRE is not installed are now downloaded first. The full JRE is 12 MB, a typical Swing application only needs to download 4 MB to start. The remaining parts are then downloaded in the background. Graphics performance on Windows improved by extensively using Direct3D by default, and use shaders on graphics