| Java, Eclipse and Web programming Tutorials |
Version 0.3
Copyright © 2009 Lars Vogel
05.10.2009
| Revision History | ||
|---|---|---|
| Revision 0.1 | 01.10.2009 | Lars Vogel |
| Created | ||
| Revision 0.2 | 02.10.2009 | Lars Vogel |
| Example project | ||
| Revision 0.3 | 05.10.2009 | Lars Vogel |
| sub-chapters for example | ||
Table of Contents
The Java Garbage Collector releases Java objects from memory as long as no other object refers to this object.
A Java heap dump is an image of the complete Java object graph at a certain point in time. It includes all objects, Fields, Primitive types and object references.
It is possible to instruct the JVM to create automatically a heap dump in case of a OutOfMemoryError.
The Eclipse MAT helps to visualize based on Java heap dumps the references to objects and provides tools to identify potential memory leaks.
To tell the JVM to create a heapdump in case of an OutOfMemoryError use the option -XX:+HeapDumpOnOutOfMemoryError
Install Eclipse MAT via the update manager of eclipse (please see Eclipse Update manager for details). Select "General Purpose Tools " and install "Memory Analyser (Incubation)" and "Memory Analyser (Charts)".
Create the Java project "de.vogella.mat.first" and the package "de.vogella.mat.first". Create the following class.
package de.vogella.mat.first;
import java.util.ArrayList;
import java.util.List;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
while (1<2){
list.add("OutOfMemoryError soon");
}
}
}
In Eclipse add the -XX:+HeapDumpOnOutOfMemoryError to the runtime configuration.

Run the project.
You should get a new file in your project (.hprof). You may need to refresh your project (F5 on the project). Double-click it and select "Leak Suspects Report".

Switch back to the overview and start your analyses of the heap dump. I believe the user interface is quite intuitive. Expecially the dominator tree gives quickly an overview of the used objects.

You can also interactive create a HeapDump via the jconsole. Type jconsole in the the command line to start it.
To allow a Java program the access of jconsole use the -Dcom.sun.management.jmxremote start option.
Use them MBeans | com.sun.management | HotSpotDiagnostics | Operations |DumpHead .
More info can be found in JConsole and JConsole Tutorial .
Thank you for practicing with this tutorial.
Please note that I maintain this website in my private time. If you like the information I'm providing please help me by donating.For questions and discussion around this article please use the www.vogella.de Google Group. Also if you note an error in this article please post the error and if possible the correction to the Group.
I believe the following is a very good guideline for asking questions in general and also for the Google group How To Ask Questions The Smart Way.
http://www.vogella.de/code/codeeclipse.html Source Code of Examples