[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[List Home]
|
[m2e-dev] memory leak: MavenClasspathContainer instances grow in JavaModelListener.resolvedContainers
|
- From: Martin Koci <martin.kocicak.koci@xxxxxxxxx>
- Date: Sun, 22 Apr 2012 19:56:30 +0200
- Delivered-to: m2e-dev@eclipse.org
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:from:to:content-type:date:message-id:mime-version:x-mailer :content-transfer-encoding; bh=UMuOxHclWOTJFCYQUuQFp5LEsxFO/JWvFVtVYASflog=; b=zrPL0LP8UuHTnMQgZTHNR+ZHHWEjd+OwbK3tnpTkInmYZuD6ShBPyT3Hd2ylZhWfHK m2BAnWJw1pmUuCrsVD9rdcQTxESOe2jKUeuEc6N/UGL9i1XUXxde7M1SHzRVdoALoRks o1G7nmbMb2UtHzFnREfyWHDHdCf0mFuertf+CzgbLa4xrofCDISnYIS4a1KJLE6EJYE6 /WkRlo8P60Jexh0I5W0sJ/cfVk3qGXh87JGW8SD8ypmeSPu6GKnKIKt3TrJoszxV4Xca lzraVB9qC9mOZr/3AXUx2RsSdv/Dngf3+dX0kwQZargc5YbDjAhUpCAr70JqHZZCALBF 4mlQ==
Hi,
I found a memory leak (probably). Tested environment: Indigo SR2, web
tools 3.3.2, m2e 1.1 M6
Use case: repeatly perform "Update project". Instances of
org.eclipse.m2e.jdt.internal.MavenClasspathContainer grow constantly.
Analysis of heap dumps performed with Memory Analyzer shows, that
immediate dominator for MavenClasspathContainer are
org.eclipse.jem.internal.adapters.jdom.JavaReflectionSynchronizer
instances and its 'resolvedContainers' attribute (from JavaModelListener
parent).
org.eclipse.jem.internal.adapters.jdom.JavaReflectionSynchronizer is a
class from org.eclipse.jem.workbench bundle ( comes with WTP).
This listener is installed for project with
"org.eclipse.jem.workbench.JavaEMFNature" nature (does add this nature
m2e or m2e-wtp automatically ?)
I don't know exactly where the problem is, only two ideas:
1)
code from
org.eclipse.jem.workbench.utility.JavaModelListener.processDelta(IJavaElementDelta):
if (((flags & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0) && !
resolvedContainers.isEmpty()){
resolvedContainers.clear();
}
there is a flag F_RESOLVED_CLASSPATH_CHANGED - maybe m2e should set this
flag?
2) JavaModelListener uses container as key into HashMap
resolvedContainers.put(container, containerEntries);
but MavenClasspathContainer class has equals/hashCode from
java.util.Object - maybe implement equals/hashCode
MavenClasspathContainer with some logical equality?
I'll create a issue for this in bugzilla and attach screenshot from
Memory Analyzer.
Regards,
Martin