Heap dumps are mostly generated at the time of JVM crash or out of memory errors.
In such case, JVM dumps the entire heap mostly in binary format. In order to load the binary into understandable format, you can use JPRofiler or Yourkit tools.
There are couple of other tools available. But I found the above 2 to be good.