This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 124716

Summary: Memory leak in main explorer
Product: platform Reporter: Jaroslav Tulach <jtulach>
Component: ExplorerAssignee: Jaroslav Tulach <jtulach>
Status: RESOLVED FIXED    
Severity: blocker CC: dsimonek
Priority: P2 Keywords: PERFORMANCE, TEST
Version: 6.x   
Hardware: All   
OS: All   
Issue Type: DEFECT Exception Reporter:
Bug Depends on:    
Bug Blocks: 121855    

Description Jaroslav Tulach 2008-01-04 15:21:47 UTC
After running test described in issue 121855, one gets following leak:

private static org.netbeans.core.NbMainExplorer$MainTab org.netbeans.core.NbMainExplorer$MainTab.lastActivated->
org.netbeans.core.NbMainExplorer$MainTab@ada1dc-parent->
javax.swing.JPanel@1a32ada-component->
[Ljava.awt.Component;@1fc2002-[0]->
org.netbeans.modules.project.ui.ProjectTab@7badec-manager->
org.openide.explorer.ExplorerManager@63e4e6-exploredContext->
org.openide.nodes.FilterNode@13b58c4-parent->
org.openide.nodes.ChildrenArray@198e51c-children->
org.openide.nodes.FilterNode$Children@15579a1-original->
org.netbeans.modules.java.j2seproject.ui.SourceNodeFactory$PackageViewFilterNode@1009d67-project->
org.netbeans.modules.java.j2seproject.J2SEProject@1ad37f6
Comment 1 David Simonek 2008-01-09 08:50:47 UTC
Belongs to explorer maintainers I think, passing there...
Comment 2 Jaroslav Tulach 2008-01-11 09:40:37 UTC
the performance team would like to ask your teams for help with making memory 
leak tests part of the commit validation.

One of the main performance goals for 6.1 is to fix memory leaks in main use 
cases and prevent regressions in future. As the first step the performance 
team plans to extend the commit validation tests by checking whether certain 
important data structures are freed from memory after the tests finish.

All leaks found so far are filed under 121855 umbrella issue:
http://openide.netbeans.org/issues/showdependencytree.cgi?id=121855

As you can see, the number of issues is not high (14 at this moment, some of 
them already fixed). We need to fix the rest - and fix leaks that appear in 
the future preferentially (as part of commit validation). Thus we will make 
the issues of P2 priority.
Comment 3 Petr Nejedly 2008-01-11 15:07:30 UTC
This looks like if some node beneath the package view node stayed as the explored context of the explorer!?
Comment 4 Jaroslav Tulach 2008-01-16 21:39:37 UTC
I fixed this one as part of issue 124712, but now there is a new one, related to some swing caches:

private static org.netbeans.core.NbMainExplorer$MainTab org.netbeans.core.NbMainExplorer$MainTab.lastActivated->
org.netbeans.core.NbMainExplorer$MainTab@43b164-parent->
javax.swing.JPanel@1cdfe45-component->
[Ljava.awt.Component;@1b6f3bc-[1]->
org.netbeans.modules.project.ui.ProjectTab@1cdc4a5-btv->
org.netbeans.modules.project.ui.ProjectTab$ProjectTreeView@3db926-tree->
org.openide.explorer.view.TreeView$ExplorerTree@13f4ba2-ui->
javax.swing.plaf.metal.MetalTreeUI@debf90-drawingCache->
java.util.Hashtable@1172140-table->
[Ljava.util.Hashtable$Entry;@56b08c-[6]->
java.util.Hashtable$Entry@18bd64f-key->
javax.swing.tree.TreePath@1bd98c9-lastPathComponent->
org.openide.explorer.view.VisualizerNode@16900eb-node->
org.netbeans.modules.project.ui.ProjectsRootNode$BadgingNode@14d99fe-listeners->
org.openide.nodes.Node$LookupEventList@fb08e-lookup->
org.netbeans.modules.project.ui.ProjectsRootNode$BadgingLookup@1094ba2-lookups->
org.openide.util.lookup.ProxyLookup@184ffa-lookups->
[Lorg.openide.util.Lookup;@150e545-[1]->
org.openide.util.lookup.SimpleLookup@a2b064-allItems->
java.util.ArrayList@2b465-elementData->
[Ljava.lang.Object;@11f66e6-[0]->
org.openide.util.lookup.InstanceContent$SimpleItem@1e76511-obj->
org.netbeans.modules.java.j2seproject.J2SEProject@c6d247
Comment 5 Jaroslav Tulach 2008-01-24 13:17:44 UTC
Making P2 as previously announced.
Comment 6 Antonin Nebuzelsky 2008-02-07 16:05:31 UTC
Reassigning to new module owner Tomas Holy.
Comment 7 t_h 2008-02-20 10:49:12 UTC
Reassigning to Jarda on his request.

junit.framework.AssertionFailedError: Checking if all projects are really garbage collected Project:
private static final org.openide.loaders.DataFilter
org.netbeans.modules.project.ui.PhysicalView$GroupNode.VISIBILITY_QUERY_FILTER->
org.netbeans.modules.project.ui.PhysicalView$VisibilityQueryDataFilter@c835ba-changeSupport->
org.openide.util.ChangeSupport@15af02e-listeners->
java.util.concurrent.CopyOnWriteArrayList@931667-array->
[Ljava.lang.Object;@19535b3-[0]->
org.openide.loaders.FolderChildren@a36729-parent->
org.netbeans.modules.project.ui.PhysicalView$GroupNode@16700b3-pi->
org.netbeans.modules.java.j2seproject.J2SEProject$Info@6b11f2-this$0->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a

private static org.netbeans.modules.navigator.NavigatorTC org.netbeans.modules.navigator.NavigatorTC.instance->
org.netbeans.modules.navigator.NavigatorTC@1607b27-activatedNodes->
[Lorg.openide.nodes.Node;@1c6b81-[0]->
org.openide.nodes.FilterNode@1a7c7d7-original->
org.netbeans.modules.java.JavaNode@1253dfb-status->
org.netbeans.spi.project.support.ant.GlobFileBuiltQuery$StatusImpl@701d1e-this$0->
org.netbeans.spi.project.support.ant.GlobFileBuiltQuery@1111c97-helper->
org.netbeans.spi.project.support.ant.AntProjectHelper@105ba85-state->
org.netbeans.api.project.ProjectManager$ProjectStateImpl@e7ecfe-p->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a

private static final java.util.Map org.openide.util.lookup.MetaInfServicesLookup.knownInstances->
java.util.WeakHashMap@1daa34-table->
[Ljava.util.WeakHashMap$Entry;@d46238-[466]->
java.util.WeakHashMap$Entry@d8143a-value->
org.netbeans.modules.java.navigation.ClassMemberNavigatorJavaSourceFactory@1b985f8-file2JS->
java.util.HashMap@11104ce-table->
[Ljava.util.HashMap$Entry;@debed3-[7]->
java.util.HashMap$Entry@1f28092-value->
org.netbeans.api.java.source.JavaSource@14d6695-classpathInfo->
org.netbeans.api.java.source.ClasspathInfo@32e0f8-srcClassPath->
org.netbeans.api.java.classpath.ClassPath@160f22d-impl->
org.netbeans.modules.java.j2seproject.classpath.SourcePathImplementation@e29377-sourceRoots->
org.netbeans.modules.java.api.common.SourceRoots@1970a06-helper->
org.netbeans.modules.java.api.common.ant.UpdateHelper@2a64a0-updateProject->
org.netbeans.modules.java.j2seproject.UpdateProjectImpl@3a036-project->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a

private static org.netbeans.jellytools.MainWindowOperator
org.netbeans.jellytools.MainWindowOperator.defaultMainWindowOperator->
org.netbeans.jellytools.MainWindowOperator@1c807d8-_menuBar->
org.netbeans.jemmy.operators.JMenuBarOperator@ff0691-source->
org.openide.awt.MenuBar@af26de-component->
[Ljava.awt.Component;@e86c61-[6]->
org.openide.awt.MenuBar$LazyMenu@1c8e35a-popupMenu->
javax.swing.JPopupMenu@831c7-component->
[Ljava.awt.Component;@463490-[2]->
org.netbeans.modules.project.ui.actions.ActiveConfigAction$ConfigMenu@d5ba3a-popupMenu->
javax.swing.JPopupMenu@1bc1010-component->
[Ljava.awt.Component;@afed70-[2]->
javax.swing.JMenuItem@dbf2d7-listenerList->
javax.swing.event.EventListenerList@1bc4dbd-listenerList->
[Ljava.lang.Object;@1c5d8ce-[3]->
org.netbeans.modules.project.ui.actions.ActiveConfigAction$ConfigMenu$2@11fef52-val$pcp->
org.netbeans.modules.java.j2seproject.J2SEConfigurationProvider@1a2ed40-p->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a

private static org.netbeans.core.NbMainExplorer$MainTab org.netbeans.core.NbMainExplorer$MainTab.lastActivated->
org.netbeans.core.NbMainExplorer$MainTab@1b6cb5d-parent->
javax.swing.JPanel@1f210cf-component->
[Ljava.awt.Component;@2c726e-[1]->
org.netbeans.modules.project.ui.ProjectTab@1ed3da1-btv->
org.netbeans.modules.project.ui.ProjectTab$ProjectTreeView@f5268c-tree->
org.openide.explorer.view.TreeView$ExplorerTree@1474776-ui->
javax.swing.plaf.metal.MetalTreeUI@145a736-drawingCache->
java.util.Hashtable@1410d6b-table->
[Ljava.util.Hashtable$Entry;@101fee3-[0]->
java.util.Hashtable$Entry@148e15b-key->
javax.swing.tree.TreePath@1169480-lastPathComponent->
org.openide.explorer.view.VisualizerNode@401fe-node->
org.netbeans.modules.project.ui.ProjectsRootNode$BadgingNode@9e0714-pair->
org.netbeans.modules.project.ui.ProjectsRootNode$ProjectChildren$Pair@fbcdf0-project->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a

private static javax.swing.text.html.StyleSheet javax.swing.text.html.HTMLEditorKit.defaultStyles->
javax.swing.text.html.StyleSheet@1fe1f98-css->
javax.swing.text.html.CSS@89fc13-styleSheet->
javax.swing.text.html.StyleSheet@2fa860-styles->
javax.swing.text.StyleContext$NamedStyle@16283c8-listenerList->
javax.swing.event.EventListenerList@1b7f740-listenerList->
[Ljava.lang.Object;@364764-[1]->
javax.swing.text.DefaultStyledDocument$StyleContextChangeHandler@bafaea-this$0->
javax.swing.text.html.HTMLDocument@4efe93-listenerList->
javax.swing.event.EventListenerList@77da20-listenerList->
[Ljava.lang.Object;@1626392-[1]->
javax.swing.text.DefaultCaret$Handler@5f9332-this$0->
javax.swing.plaf.basic.BasicTextUI$BasicCaret@d6a756-component->
javax.swing.JEditorPane@c825e5-parent->
javax.swing.JViewport@d76855-parent->
javax.swing.JScrollPane@114f086-parent->
org.netbeans.modules.project.ui.TemplatesPanelGUI@16a9bf-parent->
org.netbeans.modules.project.ui.TemplateChooserPanelGUI@33570c-project->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a

private static final java.util.Map org.netbeans.api.java.source.JavaSource.finishedRequests->
java.util.WeakHashMap@1502922-table->
[Ljava.util.WeakHashMap$Entry;@bc0c0b-[7]->
java.util.WeakHashMap$Entry@9b821b-value->
java.util.LinkedList@155a57b-header->
java.util.LinkedList$Entry@16e58c5-next->
java.util.LinkedList$Entry@e479d6-element->
org.netbeans.api.java.source.JavaSource$Request@1b63f16-task->
org.netbeans.modules.java.navigation.ElementScanningTask@1a09201-pos->
java.util.HashMap@18c7483-table->
[Ljava.util.HashMap$Entry;@6f2372-[9]->
java.util.HashMap$Entry@720220-key->
com.sun.tools.javac.code.Symbol$ClassSymbol@12fd69c-owner->
com.sun.tools.javac.code.Symbol$PackageSymbol@103973d-owner->
com.sun.tools.javac.code.Symbol$PackageSymbol@50dc22-completer->
org.netbeans.modules.java.source.usages.SymbolClassReader@1219731-fileManager->
org.netbeans.modules.java.source.parsing.ProxyFileManager@12ec603-bootPath->
org.netbeans.modules.java.source.parsing.CachingFileManager@47383e-cp->
org.netbeans.api.java.classpath.ClassPath@1db256e-impl->
org.netbeans.modules.java.source.classpath.CacheClassPath@9e1504-cp->
org.netbeans.api.java.classpath.ClassPath@8d5d46-impl->
org.netbeans.modules.java.j2seproject.classpath.BootClassPathImplementation@b346c0-evaluator->
org.netbeans.spi.project.support.ant.PropertyUtils$SequentialPropertyEvaluator@14f0907-listeners->
java.util.ArrayList@7fd3d6-elementData->
[Ljava.lang.Object;@7ca334-[12]->
org.netbeans.modules.java.j2seproject.MainClassUpdater@13882eb-project->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a

private static org.netbeans.modules.javahelp.JavaHelp org.netbeans.modules.javahelp.Installer.help->
org.netbeans.modules.javahelp.JavaHelp@1aedf49-lastJH->
javax.help.JHelp@1c6344b-contentViewer->
javax.help.JHelpContentViewer@1e2a603-ui->
javax.help.plaf.basic.BasicContentViewerUI@43995d-vp->
javax.swing.JViewport@1c8295b-componentListener->
javax.swing.text.html.HTMLEditorKit$HTMLFactory$BodyBlockView@15c9af7-attr->
javax.swing.text.html.StyleSheet$ViewAttributeSet@279ebd-attrs->
[Ljavax.swing.text.AttributeSet;@1d49a8c-[0]->
javax.swing.text.html.StyleSheet$ResolvedStyle@1c1e3f5-attrs->
[Ljavax.swing.text.AttributeSet;@670f41-[1]->
javax.swing.text.html.StyleSheet$ResolvedStyle@12a5d65-attrs->
[Ljavax.swing.text.AttributeSet;@32b492-[1]->
javax.swing.text.html.StyleSheet$ResolvedStyle@17c4636-attrs->
[Ljavax.swing.text.AttributeSet;@15fb7fb-[0]->
javax.swing.text.StyleContext$NamedStyle@1892c59-this$0->
javax.swing.text.html.StyleSheet@cf712b-css->
javax.swing.text.html.CSS@10c7678-styleSheet->
javax.swing.text.html.StyleSheet@6ec40-styles->
javax.swing.text.StyleContext$NamedStyle@794009-listenerList->
javax.swing.event.EventListenerList@d84abe-listenerList->
[Ljava.lang.Object;@15b2d03-[1]->
javax.swing.text.DefaultStyledDocument$StyleContextChangeHandler@9c2b6b-this$0->
javax.swing.text.html.HTMLDocument@6b540f-listenerList->
javax.swing.event.EventListenerList@1fa1506-listenerList->
[Ljava.lang.Object;@1490874-[1]->
javax.swing.text.DefaultCaret$Handler@924c62-this$0->
javax.swing.plaf.basic.BasicTextUI$BasicCaret@65943e-component->
javax.swing.JEditorPane@c18de6-parent->
javax.swing.JViewport@86e792-parent->
javax.swing.JScrollPane@15e73e7-parent->
org.netbeans.modules.project.ui.TemplatesPanelGUI@987248-parent->
org.netbeans.modules.project.ui.TemplateChooserPanelGUI@c481c5-project->
org.netbeans.modules.java.j2seproject.J2SEProject@3cd21a
	at junit.framework.Assert.fail(Assert.java:47)
	at org.netbeans.junit.NbTestCase.assertGC(NbTestCase.java:1203)
	at org.netbeans.junit.NbTestCase.assertGC(NbTestCase.java:1152)
	at org.netbeans.junit.Log$InstancesHandler.assertGC(Log.java:401)
	at org.netbeans.junit.Log.assertInstances(Log.java:222)
	at org.netbeans.test.ide.WatchProjects.assertProjects(WatchProjects.java:101)
	at org.netbeans.test.ide.IDEValidation.testGCProjects(IDEValidation.java:1401)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at org.netbeans.junit.NbTestCase.access$200(NbTestCase.java:83)
	at org.netbeans.junit.NbTestCase$2.doSomething(NbTestCase.java:314)
	at org.netbeans.junit.NbTestCase$1Guard.run(NbTestCase.java:252)
	at org.netbeans.junit.NbTestCase.runBare(NbTestCase.java:330)
	at org.netbeans.jellytools.JellyTestCase.runBare(JellyTestCase.java:144)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at org.netbeans.junit.NbTestCase.run(NbTestCase.java:192)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at org.netbeans.xtest.testrunner.JUnitTestRunner.runTests(JUnitTestRunner.java:191)
	at org.netbeans.xtest.testrunner.JUnitTestRunner.runTests(JUnitTestRunner.java:146)
	at org.netbeans.xtest.plugin.ide.MainWithExec.run(MainWithExec.java:108)
	at org.netbeans.xtest.plugin.ide.Main$3.run(Main.java:326)
	at java.lang.Thread.run(Thread.java:595)
Comment 8 Jaroslav Tulach 2008-02-22 13:43:33 UTC
I have fixed the test to clear all UI peers from existing JTrees.

changeset:   68110:39ab15eebc3e
user:        Jaroslav Tulach <jtulach@netbeans.org>
date:        Fri Feb 22 11:00:04 2008 +0100
summary:     JTree UI keeps reference to invisible nodes due to some "drawingCache"