Tag Archives: g1

Java SE 6 1.6.0_18 update worthy of note

Compared to other v6 release the release of Java SE 1.6.0_18 is definitely worthy of note.

Major changes

  • VisualVM 1.2
  • Performance improvements
  • 20% faster jar file creation
  • Java Hotspot VM 16.0
    • Improved NUMA-aware allocation giving a 30% (for 32-bit) to 40% (for 64-bit) increase in performance (which is due also to arrive in jdk7 as well)
    • Garbage collection improvements including new default java heap configuration in client and server vms
    • Classloading optimisations for faster startup
    • Code generation improvements including elision of needless conversions between integer primitive types and optimisations of common string concatenation patterns
    • Garbage First (G1) garbage collector improved reliability and performance
    • New options to request a heap dump or class histogram before or after a full GC
    • Escape analysis based optimisation which appeared in 6u14 has been disabled in 6u18 to be restored in a future update

Minor changes

  • Support for Windows 7
  • JavaDB 10.5.3.0
  • Application startup improvements
  • Runtime performance improvements for UI applications
  • Ability to read larger zip files of size up to 4GB

As the community eagerly awaits Java 7 in Q4 of 2010 releases such as this one serve to provide a little excitement in the mean time. It’s interesting to see that certain features that are due to arrive with Java 7 are also being offered in Java 6 such as NUMA-aware allocation, G1 collector and escape analysis. For whatever reason escape analysis has been disabled in this release but no reason has been given – it would be interesting to know why.

Java G1 GC Resources

Here are a couple of great resources on G1 – the new low latency server style garbage collector in jdk6u14 and jdk7.

It’s fascinating to note how radically different G1 is to its predecessors in its design and behaviour. In summary it offers utilisation of hardware parallelism (uses all cpu’s and cores to do its work), concurrency (does its work alongside application threads), predictability (via the pause prediction model), a fine grained homogenous region-based generational model and finally, my favourite of all, heap compaction to fight the heap fragmentation that occurs as a result of in-place deallocation on CMS. Once they’ve stabilised it further in jdk7 it should be a formidable next-generation alternative to CMS which is what we all want.

Jdk6u14 released with updated VisualVM and G1 garbage collector

Jdk6u14 has been released with following notable changes (taken from release notes).

Java HotSpot VM 14.0

6u14 includes version 14.0 of the Java HotSpot Virtual Machine, which provides improved reliability, serviceability and performance.

Contributing to increased performance in this release are numerous enhancements to HotSpot’s optimizing compiler, more efficient SoftReference processing and improvements to Parallel Compacting garbage collection. Optionally available are two new features – escape analysis and compressed object pointers. A preliminary version of the new Garbage First (G1) garbage collector is also included.

  • Optimization Using Escape Analysis

    The -XX:+DoEscapeAnalysis option directs HotSpot to look for objects that are created and referenced by a single thread within the scope of a method compilation. Allocation is omitted for such non-escaping objects, and their fields are treated as local variables, often residing in machine registers. Synchronization on non-escaping objects is also elided.

  • Compressed Object Pointers

    The -XX:+UseCompressedOops option can improve performance of the 64-bit JRE when the Java object heap is less than 32 gigabytes in size. In this case, HotSpot compresses object references to 32 bits, reducing the amount of data that it must process.

  • Garbage First (G1) Garbage Collector

    Garbage First, or G1, is a low pause, server style collector. G1’s primary advantages over the Concurrent Mark-Sweep (CMS) collector include incremental compaction, better predictability and ease of use. Although G1 is available for use in this release, note that production use of G1 is only permitted where a Java support contract has been purchased. [..].

    To try G1, specify these command line options:

     
    -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
    

    In addition, the following options can be used to affect G1’s behaviour:

    • To set the max GC pause time goal in milliseconds that G1 will attempt to meet:

       
      -XX:MaxGCPauseMillis=<X>
      
    • To set the time interval over which GC pauses totaling up to MaxGCPauseMillis may take place:

       
      -XX:GCPauseIntervalMillis=<X>
      

    For more information about G1 (how it operates, more options, etc.) see Java HotSpot Garbage Collection.

Improvement TreeMap Iteration

6u14 includes an experimental implementation of java.util.TreeMap that can improve the performance of applications that iterate over TreeMaps very frequently. This implementation is used when running with the -XX:+AggressiveOpts option.

JAX WS 2.1.6 and JAXB 2.1.10

JAX-WS 2.1.6 and JAXB 2.1.10 are integrated into JDK 6u14. You can find more details about the new features in the JAX-WS 2.1.6 changelog and in the JAXB 2.1.10 changelog.

Java VisualVM Updates

6u14 contains the following updates to Java VisualVM:

  • CPU usage and GC activity graph in the Monitor tab
  • Table view in the Threads tab
  • Command line options: –openpid, –openjmx, –openfile
  • Compare Memory Snapshots action in the context menu
  • Copy To Clipboard / Save To File buttons in the About dialog
  • Monitoring IBM JVM via JMX connection
  • Based on NetBeans Platform 6.5 and NetBeans Profiler 6.5
  • Faster computation of references, and improved readability of path to GC root in HeapWalker
  • Improved integration of the Visual GC tool

Click for a list of Java VisualVM bug fixes related to this release.