Download JXRay Memory Analyzer





Zip file, all platforms
Compressed archive in ZIP format [423.9 KB]

What's new in version 2.3

  • Direct retained memory is reported for each class in the "Where memory goes, by class" report section. This is useful for classes like that "exclusively own" objects that they reference, and these objects can take a lot more memory than their owners.
  • Added -extra_classes flag, to allow the user to obtain information for class(es) that are normally not reported because they use too little memory
  • We now properly handle heap dumps generated by JDK 9/10 JVMs. The tool itself can also run on JDK 9/10
  • Added a new problem kind: list with too many null elements
  • The generated HTML files are smaller now. Objects in samples are printed in a more compact form to both improve readability and reduce report size
  • Numerous other improvements to make the report more informative and faster/easier to read


What's new in version 2.2

  • We now report off-heap (native) memory used by java.nio.DirectByteBuffer objects
  • Improved random samples of collections: contents of contained objects are printed where possible, capacity is printed for array-based collections, etc.
  • Improved "ergonomics": memory overhead is highlighted by different colors depending on the value; if a dump was generated as a result of OutOfMemoryError, the respective thread is printed in the Top-Level Stats section, etc.
  • Added support for some more collection types 

What's new in version 2.1

  • In the "where memory goes, by class" there are now random samples of objects, for each class and reference chain
  • Fixed some issues with parsing and analyzing Android heap dumps
  • Added new problem kind: primitive arrays where in each element the upper half (high bits), such as two high bytes in int, are zero
  • Performance and memory consumption for big heap dumps improved even more

What's new in version 2.0

  • "Where memory goes, by GC root" section is now presented as expandable trees, one tree for each GC root
  • All threads and stack traces are printed in a new report section
  • are printed in a new report section
  • The script now accepts JXRAY_JAVA_HOME and JXRAY_JAVA_FLAGS env variables, and/or the user can pass the JVM options directly to the script, using the -J prefix, e.g. -J-Xmx64g
  • Improved performance and reduced memory consumption, especially for big dumps


What's new in version 1.9

  • Significantly improved performance (at least 30 per cent faster than before) and reduced memory consumption
  • UI improvements: most tables are now collapsible; very big tables are scrollable; bytes in byte[] arrays with human-readable contents are presented as chars, etc.
  • Heap scanning order has been changed so that the more meaningful roots such as statics are scanned first, WeakHashMaps and weak references are scanned in the end, etc.
  • New problem kind: sparse collections


What's new in version 1.8

  • Semi-interactive HTML presentation
  • More detailed output, including the "Where memory goes, by class" section
  • New problem kind: sparse object arrays
  • New problem kind: sparse primitive arrays


What's new in version 1.7

  • New problem kind: objects that are unreachable, but still in the finalization queue
  • New problem kind: misconfigured maximum heap size, that makes the HotSpot JVM use a less compact object format (wide pointers) leading to higher than necessary memory consumption
  • Better presentation of reference chains with high retained memory
  • For duplicate strings, bad collections etc. we now report "expensive fields" when problematic objects are pointed by multiple different reference chains ending with the same data field, like MyClassReferencedByMany.almostAlwaysEmptyHashMap
  • The percentage of various "bad" objects wrt. the total number of such objects is now reported. For example, how many (what percentage) of HashMap instances are empty, etc.
  • Better lookup of possible sources of garbage objects. That is, finding live reference chains leading to objects of type Foo that are most similar to the given group of unreachable Foo objects.
  • Several performance, scalability and accuracy improvements


What's new in version 1.6

  • Improved calculation and presentation of reference chains with high retained memory when such chains stem from multiple concurrent threads and local variables.
  • Number of referenced objects is reported in addition to retained memory for each reference chain
  • Improved performance, especially for the heap dumps that have many small objects and strings
  • The real JVM pointer size (4 or 8 bytes) and object header size (12 or 16 bytes) is calculated correctly regardless of the heap dump file size
  • Linked lists of arbitrary type, such as -> -> ... are presented in a compact form, like {}
  • Instances of StringBuilder and StringBuffer are now treated in the same way as Strings - their char[] buffer is handled as implementation details
  • Total number of threads in the dump is reported in addition to the total number of classes.


Print Print | Sitemap