<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/wordpress-mu-1.2.4" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Memory Analyzer News</title>
	<link>http://dev.eclipse.org/blogs/memoryanalyzer</link>
	<description>News from the Memory Analyzer</description>
	<pubDate>Wed, 14 May 2008 14:01:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=wordpress-mu-1.2.4</generator>
	<language>en</language>
			<item>
		<title>Feedback on Memory Analyzer @ Java One 2008</title>
		<link>http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/14/feedback-on-memory-analyzer-java-one-2008/</link>
		<comments>http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/14/feedback-on-memory-analyzer-java-one-2008/#comments</comments>
		<pubDate>Wed, 14 May 2008 14:01:11 +0000</pubDate>
		<dc:creator>Krum Tsvetkov</dc:creator>
		
		<category><![CDATA[Memory Analyzer]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/14/feedback-on-memory-analyzer-java-one-2008/</guid>
		<description><![CDATA[Hello,
I just wanted to take the opportunity to thank everybody who joined our technical session at Java One 2008 - &#8220;Automated Heap Dump Analysis for Developers, Testers, and Support Employees&#8221;.
I was very happy to see more than 400 people in the room, despite of the fact that the session was in the afternoon of the [...]]]></description>
			<content:encoded><![CDATA[<p>Hello,</p>
<p>I just wanted to take the opportunity to thank everybody who joined our technical session at Java One 2008 - &#8220;Automated Heap Dump Analysis for Developers, Testers, and Support Employees&#8221;.<br />
I was very happy to see more than 400 people in the room, despite of the fact that the session was in the afternoon of the very last day of the conference. Thank you! It was a real pleasure for us the speakers.</p>
<p>As a project that is relatively new at Eclipse (was recently contributed by SAP) we are very interested to get some feedback from you - both about our JavaOne session and about the tool. </p>
<p>So I hope that we can get some comments added to this blog from the people who saw the session @ Java One and want to spend several minutes to give us their valuable opinion.</p>
<p>And for any feedback, suggestions or comments on the tool itself, please use our <a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.memory-analyzer">newsgroups</a>.</p>
<p>For anybody who is interested in the topic and in the Memory Analyzer tool, but didn&#8217;t have the chance to play with it yet - our project page is <a href="http://www.eclipse.org/mat/">http://www.eclipse.org/mat/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/14/feedback-on-memory-analyzer-java-one-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Power of Aggregation: Making sense of the Objects in a Heap Dump</title>
		<link>http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/08/the-power-of-aggregation-making-sense-of-the-objects-in-a-heap-dump/</link>
		<comments>http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/08/the-power-of-aggregation-making-sense-of-the-objects-in-a-heap-dump/#comments</comments>
		<pubDate>Thu, 08 May 2008 09:11:44 +0000</pubDate>
		<dc:creator>Elena Nayashkova</dc:creator>
		
		<category><![CDATA[Memory Analyzer]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/08/the-power-of-aggregation-making-sense-of-the-objects-in-a-heap-dump/</guid>
		<description><![CDATA[The goal of this article is not to provide you with a step-by-step approach in finding memory problems, but to reveal several powerful features of the Memory Analyzer, which are irreplaceable in memory leak hunting. These features might be unified into one topic – aggregation.
Memory Analyzer - is a powerful Java heap analyzer. It makes [...]]]></description>
			<content:encoded><![CDATA[<p>The goal of this article is not to provide you with a step-by-step approach in finding memory problems, but to reveal several powerful features of the <a href="http://www.eclipse.org/mat">Memory Analyzer</a>, which are irreplaceable in memory leak hunting. These features might be unified into one topic – aggregation.</p>
<p>Memory Analyzer - is a powerful Java heap analyzer. It makes it possible to find a memory leak or reduce memory consumption by looking into the heap dump only. Our <a href="http://wiki.eclipse.org/index.php/MemoryAnalyzer#Getting_a_Heap_Dump">wiki page</a> provides detailed information on how to acquire a heap dump.</p>
<p>Sometimes you open a heap dump in Memory Analyzer and see nothing &#8230; but a pile of small objects:</p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/overview.gif" title="oveview page without memory leak suspect"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/overview.gif" alt="oveview page without memory leak suspect" /></a></p>
<p>As overview pane shows, the majority of retained memory is more or less equally distributed among several objects, which makes it difficult to see a suspect for a memory leak at first sight.</p>
<p><strong>Grouping in Dominator Tree</strong></p>
<p>The pie in the overview pane is a graphical representation of the Dominator Tree, which you can open from the toolbar using the button <a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/dominator_tree.gif" title="dominator tree toolbar icon"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/dominator_tree.gif" alt="dominator tree toolbar icon" /></a></p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/dom_tree.gif" title="dominator tree without grouping"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/dom_tree.gif" alt="dominator tree without grouping" /></a></p>
<p>The Dominator Tree is built out of an object graph. Each object in the tree is responsible for keeping its children alive. The tree is sorted in descending order according to the size an object retains in memory.<br />
Now, if we group the dominator tree by class (using the drop-down toolbar menu), we will see a different picture:</p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/dom_tree_by_class.gif" title="dominator tree grouped by class"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/dom_tree_by_class.gif" alt="dominator tree grouped by class" /></a></p>
<p>We can see that 700 objects of class <em>com.foo.bar.menu.MenuEntry</em> retain 46 % of the total heap space. Suddenly we see an unequal distribution of the retained memory.<br />
How is it possible that we see it only now? The answer is that in this heap dump we do not have one single big object, but a group of leaking objects. Remember, the overview page of the heap dump only displays the distribution of retained memory heap on a per-object basis. So, when we group the dominator tree by class, we group our leaking objects to their origin class and thus get an accumulated retained heap.<br />
Let&#8217;s find out who is referencing all those <em>com.foo.bar.menu.MenuEntry </em>objects. For this select <strong>List objects &#8211;&gt; with incoming references</strong> from the context menu. As a result we will get an object reference graph:</p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/object_list.gif" title="object list with incoming references"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/object_list.gif" alt="object list with incoming references" /></a></p>
<p>If we drill down into the <em>com.foo.bar.menu.MenuEntry</em>, we can see the chain of objects referencing our suspect. Unfortunately, in this case it is not really helpful as we see only a <em>LinkedList</em> structure.</p>
<p><strong>Grouping referrers to the class level </strong></p>
<p>As we have seen looking at the incoming references graph for our suspect objects did not reveal a lot. Grouping referrers to class level might be more helpful. This operation is performed via a context menu. Back in the dominator tree grouped by class, right-click on our suspect <em>com.foo.bar.menu.MenuEntry</em> and select <strong>Show objects by class &#8211;&gt; by incoming references</strong>:</p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/referres_by_class_menu.gif" title="show objects by class - context menu"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/referres_by_class_menu.gif" alt="show objects by class - context menu" /></a></p>
<p>Grouping referrers by class allows us to see a simple and easy to understand reference chain:</p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/referres_by_class.gif" title="incoming references grouped to the class level"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/referres_by_class.gif" alt="incoming references grouped to the class level" /></a></p>
<p>We can now see, that class <em>com.foo.bar.menu.MenuEntry</em> is referenced by a <em>LinkedListEntry</em>, which we already knew. But as we continue we see that this entry is again referenced by a <em>LinkedListEntry</em> (this is the head of the <em>LinkedList</em>) and by the <em>LinkedList</em>. <em>LinkedList</em> itself is referenced by two classes, one of which is of no interest as it is from the java.* package (which for now we assume to be unproblematic). The other one, however, is of interest.<br />
The easiest way to find out what keeps our memory leaking group of objects alive in the heap is to check the path to the garbage collection roots. However, paths to garbage collection roots can only be found for a single object but we are interested in finding a common chain of references to a group of objects. Well, this is also possible.</p>
<p><strong>Merging Paths to Garbage Collection Roots</strong></p>
<p>The Merged Paths to GC Roots view shows the shortest paths from the GC roots to each instance of the selected class. You can open this heap editor using the context menu <strong>Merge Shortest Paths to GC Roots</strong> on the <em>com.foo.bar.menu.MenuEntry</em> class instance:</p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/merged_paths_menu.gif" title="merge paths to the garbage collection roots context menu"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/merged_paths_menu.gif" alt="merge paths to the garbage collection roots context menu" /></a></p>
<p>This operation explores all the paths from the different objects to their GC roots at once and finds a common chain of references for this group of objects. It is a common procedure to exclude weak and soft references from the result as they cannot be the main reason of keeping the objects of interest alive.</p>
<p><a href="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/merged_paths.gif" title="merged paths to garbage collection roots"><img src="http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/05/merged_paths.gif" alt="merged paths to garbage collection roots" /></a></p>
<p>There we got the reason: one instance of the class <em>com.foo.bar.menu.FoodSupplies </em>keeps in memory 700 instances of the class <em>com.foo.bar.menu.MenuEntry</em>. Now is the right time to check what is going on in the code and fix the problem.</p>
<p><strong>Conclusion</strong></p>
<p>Apparently, Memory Analyzer has more aggregation features to offer. Some of them will be covered in  our future blogs.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/08/the-power-of-aggregation-making-sense-of-the-objects-in-a-heap-dump/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Immortal Objects - Or: How to Find Memory Leaks</title>
		<link>http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/21/immortal-objects-or-how-to-find-memory-leaks/</link>
		<comments>http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/21/immortal-objects-or-how-to-find-memory-leaks/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 17:07:02 +0000</pubDate>
		<dc:creator>Andreas Buchen</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/21/immortal-objects-or-how-to-find-memory-leaks/</guid>
		<description><![CDATA[This is a classic memory leak: Select Window -&#62; New Window in your Eclipse IDE and then close the new window right away. The heap usage grows a little bit. Open and close a couple new windows and the heap usage grows more. That&#8217;s what bug 206584 is about. In this blog, I will use [...]]]></description>
			<content:encoded><![CDATA[<p>This is a classic memory leak: Select <em>Window -&gt; New Window</em> in your Eclipse IDE and then close the new window right away. The heap usage grows a little bit. Open and close a couple new windows and the heap usage grows more. That&#8217;s what bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206584">206584</a> is about. In this blog, I will use the &#8220;New Window&#8221; leak to explain how to find memory leaks using the <a href="http://www.eclipse.org/mat/">Memory Analyzer</a>.</p>
<p>A <a href="http://en.wikipedia.org/wiki/Memory_Leak">memory leak</a> is an unintentional memory usage. In Java programs, leaks are objects which are not used/needed anymore, but which are still reachable and therefore are not removed by the <a href="http://en.wikipedia.org/wiki/Garbage_Collection">Garbage Collector</a>. In our case this means that instances of <em>WorkbenchWindow</em> are not garbage collected even though the window is closed and the workbench window instance is not needed anymore.</p>
<p>Once we got hold of the leaking object, we have to determine why it is still around. To do this, we follow the reference chain from the object to the Garbage Collection (GC) roots. GC roots are objects which are assumed to be reachable by the virtual machine: objects on the call stack of the current thread (e.g. method parameters and local variables), the thread itself and classes loaded by the system class loader. Looking at that reference path, we can decide which reference should be removed as it is accidentally keeping the leaking object alive.</p>
<p>Enough theory, let&#8217;s get started&#8230;</p>
<h3>Reproduce the Leak</h3>
<p>I did use an Eclipse 3.4M6a milestone build and reproduced the leak by using a default launch configuration for the product <em>org.eclipse.platform.ide</em>. Then I started the IDE, opened a new window via Window -&gt; New Window and closed the window right away.</p>
<h3>Acquire a Heap Dump</h3>
<p>Now I need to create a heap dump. There are <a href="http://wiki.eclipse.org/index.php/MemoryAnalyzer#Getting_a_Heap_Dump">many ways</a> to do this. On Windows, I find the easiest way is to use JRE 6 and JConsole. You can configure your JRE in the Eclipse Preferences: <em>Java -&gt; Installed JREs</em>. Please note: you cannot use JConsole on JRE 5 VMs because the MBean does not provide the operation to write a heap dump.</p>
<p>Start &lt;jre6&gt;/bin/jconsole.exe and select the running Eclipse IDE:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/jconsole.png' alt='JConsole Screenshot' /></p>
<p>Then, select the operation <em>dumpHeap</em> from the <em>com.sun.management.HotSpotDiagnostic</em> MBean. The first parameter <em>p0</em> is the full path to the heap dump file. Make sure you give it the file extension <em>.hprof</em>. The second parameter <em>p1</em> should be left at <em>true</em> as we are only interested in live objects.</p>
<p><a href='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/jconsole2b.png' title='JConsole Screenshot (Trigger Writing a Heap Dump)'><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/jconsole2b.png' alt='JConsole Screenshot (Trigger Writing a Heap Dump)' /></a></p>
<h3>Open the Heap Dump in the Memory Analyzer</h3>
<p>Start the Memory Analyzer and select &#8220;Open Heap Dump&#8230;&#8221; from the File menu. The heap dump will be parsed and a number of index files is created next to the dump. Those are needed for fast access to the data in the dump.</p>
<p><a href='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/overview.png' title='Heap Dump Overview'><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/overview.png' alt='Heap Dump Overview' /></a></p>
<p>The difficult part is to find the leaking object. In our case we can make it easy: we specifically test the &#8220;New Window&#8221; scenario so that&#8217;s what we are looking for. And we can assume some implementation knowledge: a workbench window is represented by the class WorkbenchWindow. So let&#8217;s open the histogram and filter (the first row) by that class:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/histogram.png' alt='Histogram' /></p>
<p>Et voilà, we have 2 instances even though we already closed the second window. Let&#8217;s have a look at those two objects. I choose the incoming references to see who is immediately referencing these <em>WorkbenchWindow</em> instances:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/histogram2.png' alt='Histogram (Select Incoming References)' /></p>
<p>To decide which of the objects is good and which is bad, I open the incoming references. The second object is referenced by the <em>Workbench</em> via <em>activeWorkbenchWindow</em>. This looks okay, so the first one is suspicious.</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/list.png' alt='Object List (Incoming References)' /></p>
<h3>Path to Garbage Collection Roots</h3>
<p>Via the context menu, I select to display the <em>shortest path to the GC roots</em>. I am excluding <a href="http://en.wikipedia.org/wiki/Weak_reference">weak</a> and <a href="http://en.wikipedia.org/wiki/Soft_reference">soft references</a>, because they cannot be the root cause for keeping the WorkbenchWindow alive.</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/list2.png' alt='Object List (Select Path to GC Roots)' /></p>
<p>Expanding the view a little bit, I get the following picture:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc_all.png' alt='Path to GC Roots' /></p>
<p>What does it mean? These are the reference chains keeping the <em>WorkbenchWindow</em> alive. The name of the member variable that is holding the reference is printed in bold.</p>
<h3>Analyzing the First Reference Path</h3>
<p>To make sense of this, we need knowledge of the coding. I am not familiar with the code myself, but let&#8217;s see what we can dig up.</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc_all_2.png' alt='Path to GC Roots (First Reference Chain)' /></p>
<p>Looking at the first reference chain, I see the attribute <strong>listenerList</strong> of the Command object (A). I take a closer look because registering a listener and then forgetting to unregister the listener is a very easy way to create a leak. The Command objects are global and hence independent of the workbench window. A little further up, there is the anonymous inner class CommandAction$1 (B) in the listener list, which references the WorkbenchCommandAction (C) via <em>this$0</em> (a reference automatically generated for non-static inner classes). Checking the source code, I know that WorkbenchCommandAction extends CommandAction. This is also a common pattern: the listener is an anonymous inner class.</p>
<h3>Check if Listener is Removed</h3>
<p>Okay, let&#8217;s get our hands dirty and take a look at the CommandAction code. This is the init method where we find the listener registration:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/code1.png' alt='Code' /></p>
<p>The listener itself is created in the <em>getCommandListener</em> method. Note that a reference is kept as member variable. The reference is needed to unregister the listener.</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/code2.png' alt='create command listener' /></p>
<p>So let&#8217;s take a look at the <em>dispose</em> method:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/code3.png' alt='dispose method' /></p>
<p>Yes, the listener is properly unregistered. No problem with this code.</p>
<h3>Inspecting the Leak Object&#8230;</h3>
<p>We need to know who forgets to call the <em>dispose</em> on the CommandAction. So let&#8217;s go back and have a look at the Command object. The Object Inspector (open the view via <em>Window-&gt;Show View&#8230;</em> if not yet open) shows the content of all member attributes. There we find the <em>id</em> attribute.</p>
<p><a href='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc.png' title='Path to GC Roots with Object Inspector'><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc.png' alt='Path to GC Roots with Object Inspector' /></a></p>
<p>A quick code search with that id brings us to the ActionFactory which creates the WindowCommandAction object:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/code4.png' alt='ActionFactory' /></p>
<p>Another search for references brings us to the WorkbenchActionBuilder. Looking at the code, the action is created and a reference is kept. But in the <em>dispose</em> method of the <em>WorkbenchActionBuilder</em> that reference is only nulled and not disposed. But after all, that&#8217;s just a one line code change to fix. (I attached a patch to the bug.)</p>
<h3>Analyzing the Second Reference Path</h3>
<p>It turns out that the second path has a very similar cause:</p>
<p><img src='http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc_all_3.png' alt='Path to GC Roots (Second Reference Chain)' /></p>
<p>Again, a <em>WorkbenchCommandAction</em> is involved. This time a class name in the reference chain gives us the hint: The <em>BaseNewWizardMenu</em> class uses the <em>ActionFactory</em> to create a command but does not dispose it properly. That is another one liner to fix.</p>
<p>If I now run the same scenario again, I only find one instance of the <em>WorkbenchWindow</em> in the histogram.</p>
<h3>Conclusion</h3>
<p>I hope you enjoyed this blog about analyzing a memory leak. Admittedly, we already knew what was leaking (the workbench window) and therefore could concentrate on the problem right away. One can use this approach for example when developing a new editor, view, plugin, perspective, etc. etc.</p>
<p>So what if you do not know what is leaking? Well, let me say this for now: let the leak grow until it shows up in the biggest objects. That is usually the case if your virtual machine throws an OutOfMemory (OoM) error. Make sure you <a href="http://wiki.eclipse.org/index.php/MemoryAnalyzer#Getting_a_Heap_Dump">configured</a> your VM to write a heap dump on OoM (-XX:+HeapDumpOnOutOfMemoryError). Then run the Memory Analyzer.</p>
<p>Comments and Feedbacks are very welcome!</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/21/immortal-objects-or-how-to-find-memory-leaks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hello (Memory Interested) World!</title>
		<link>http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/20/hello-memory-interested-world/</link>
		<comments>http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/20/hello-memory-interested-world/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 15:01:21 +0000</pubDate>
		<dc:creator>Andreas Buchen</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/20/hello-memory-interested-world/</guid>
		<description><![CDATA[We are kicking off this blog with a traditional Hello World!. We will use this space to inform you about news from the Memory Analyzer project. The Memory Analyzer is a fast and feature-rich Java Heap Analyzer that helps you find memory leaks and reduce memory consumption.
Some links: Screenshots, Download, Wiki.
For those who have not [...]]]></description>
			<content:encoded><![CDATA[<p>We are kicking off this blog with a traditional <em>Hello World!</em>. We will use this space to inform you about news from the <a href="http://www.eclipse.org/mat">Memory Analyzer</a> project. The Memory Analyzer is a fast and feature-rich <strong>Java Heap Analyzer</strong> that helps you find memory leaks and reduce memory consumption.</p>
<p>Some links: <a href="http://www.eclipse.org/mat/about/screenshots.php">Screenshots</a>, <a href="http://www.eclipse.org/mat/downloads.php">Download</a>, <a href="http://wiki.eclipse.org/MemoryAnalyzer">Wiki</a>.</p>
<p>For those who have not been able to attend our <a href="http://www.eclipsecon.org/2008/index.php?page=sub/&amp;id=321">EclipseCon session</a>, you might want to join us at JAX or JavaOne. Here are the dates:</p>
<blockquote><p>
<a href="http://jax.de">JAX</a>, Wiesbaden, Germany<br />
<strong>Automatisierte Speicheranalyse: Auf der Jagd nach den Speicherfressern</strong><br />
Speaker: Erwin Margewitsch<br />
Wednesday, 23 April 2008, 10:00-11:00
</p></blockquote>
<blockquote><p>
<a href="http://java.sun.com/javaone/sf/">JavaOne</a>, San Francisco, CA, USA<br />
<strong>Automated Heap Dump Analysis for Developers, Testers, and Support Employees</strong><br />
Speakers: Krum Tsvetkov, Andreas Buchen<br />
Friday, 9 May 2008, 11:30-12:30
</p></blockquote>
<p>Please leave us your comments and feedbacks!</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/20/hello-memory-interested-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
