JXRay is an offline heap analyzer for Java. It takes a binary heap dump, analyses it and produces a text report. Here are the main advantages of JXRay:
Detecting common problems right away. Most profilers leave data interpretation up to you. In contrast, JXRay analyzes the heap dump upfront for many known memory problems. Your heap dump is checked for memory leaks and numerous other common data inefficiencies (data duplication, suboptimal use of data structures, etc.). All significant problems are highlighted, and you see them immediately.
Knowledge of internals. JXRay has knowledge of implementation details of most of the common Java and Scala collections: maps (e.g. java.util.HashMap), lists (e.g. java.util.ArrayList) etc. That allows it to accurately calculate how much memory your data (workload) takes and how much is the implementation of collections themselves. In certain cases, e.g. when you allocate a large number of ArrayLists with just 1-2 elements in each, their overhead can be surprisingly high!
No-frills tool. While it may seem counterintuitive, the fact that JXRay has no GUI and produces a simple text report, has clear advantages. You can easily run the tool on any machine, including big "headless" machines running in the cloud. And once the report is generated, you can look at it anywhere at any time, send it by e-mail, attach to a JIRA ticket, share on the wiki, etc. The information is easily searchable and its intuitive presentation makes it easy to understand by anyone.