A heap dump is a snapshot of the memory of a Java process at a certain point of time. There are different formats for persisting this data, and depending on the format, may contain different pieces of information; but, in general, the snapshot contains information about the Java objects and classes in the heap at the moment the snapshot was triggered. In some cases, a full GC is triggered before the heap dump is written so it contains information about the remaining objects.
The Memory Analyzer is able to work with HPROF binary heap dumps, IBM system dumps (old versions require preprocessing), and IBM portable heap dumps (PHD) from a variety of platforms.
Typical information which can be found in heap dumps (depending on the heap dump type):
Class, fields, primitive values and references
Classloader, name, super class, static fields
When MAT parses IBM system dumps, the size of classes includes some of the amount of native memory in the Java process (but outside of the Java heap) which is related to those classes such as native memory for bytecode and JIT compiled code for the class methods. In some cases, this may cause the total size reported on the Overview pane to exceed the maximum Java heap size. This calculation may be disabled using an option in the MAT configuration.
Objects defined to be reachable by the JVM
The call-stacks of threads at the moment of the snapshot, and per-frame information about local objects
A heap dump does not contain allocation information so it cannot resolve questions like who had created the objects and where they have been created.