Java has a built-in feature for dumping heap snapshots to files in HPROF binary format. You can analyze these snapshots using all of the powerful features that YourKit Java Profiler provides for its own memory snapshots.
HPROF snapshots can be created in the following ways:
- Automatically when OutOfMemory occurs
Explicitly from within the profiler UI (Sun Java 6)
Explicitly via jmap utility (Sun Java 6)
Sun Java 6 has the
jmaputility that allows to connect to running Java process and dump Java heap:
jmap -dump:format=b,file=file_name.hprof <pid>
Hint: to learn the PID (process identifier) of running JVM, you can use
The benefit is that memory can be analyzed on demand with no additional configuration of JVM or Java application. You can dump memory of any running instance of JVM that supports this feature.
Explicitly via jconsole utility (Sun Java 6)
Sun Java has the
jconsoleutility that lets you to connect to a running Java 6 process for monitoring and management.
Using jconsole, you can dump Java heap via HotSpotDiagnostic MBean
Produced with Java's built-in basic level profiling capability HPROF
This approach has a lot of drawbacks and is not useful nowadays, but is mentioned here to show the complete picture.
How it works
HPROF snapshots (*.hprof) can be opened the same way as YourKit Java Profiler format snapshots (*.snapshot)
Some HPROF snapshots do not contain values of primitive types.
When such snapshots are opened in the profiler, values of
java.lang.String's will not be available.