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 269686 - Memory leak in POMModelPanel
Summary: Memory leak in POMModelPanel
Status: RESOLVED FIXED
Alias: None
Product: projects
Classification: Unclassified
Component: Maven (show other bugs)
Version: Dev
Hardware: PC Linux
: P3 normal (vote)
Assignee: Tomas Stupka
URL:
Keywords: PATCH_AVAILABLE, PERFORMANCE
Depends on:
Blocks:
 
Reported: 2017-01-30 17:10 UTC by Jesse Glick
Modified: 2017-04-13 19:14 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments
Possible fix (not yet tested) (2.22 KB, patch)
2017-01-30 17:12 UTC, Jesse Glick
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Jesse Glick 2017-01-30 17:10:47 UTC
In a recent dev build with a massive memory leak (#269685 may have been the main problem), I noticed

this     - value: org.netbeans.modules.xml.xdm.nodes.Token #91502
 <- [2]     - class: java.lang.Object[], value: org.netbeans.modules.xml.xdm.nodes.Token #91502
  <- elementData     - class: java.util.ArrayList, value: java.lang.Object[] #442274
   <- tokens     - class: org.netbeans.modules.xml.xdm.nodes.Element, value: java.util.ArrayList #349629
    <- [3]     - class: java.lang.Object[], value: org.netbeans.modules.xml.xdm.nodes.Element #22290
     <- elementData     - class: java.util.ArrayList, value: java.lang.Object[] #442272
      <- children     - class: org.netbeans.modules.xml.xdm.nodes.Element, value: java.util.ArrayList #349627
       <- [1]     - class: java.lang.Object[], value: org.netbeans.modules.xml.xdm.nodes.Element #22289
        <- elementData     - class: java.util.ArrayList, value: java.lang.Object[] #442269
         <- children     - class: org.netbeans.modules.xml.xdm.nodes.Element, value: java.util.ArrayList #349624
          <- [3]     - class: java.lang.Object[], value: org.netbeans.modules.xml.xdm.nodes.Element #22288
           <- elementData     - class: java.util.ArrayList, value: java.lang.Object[] #442258
            <- children     - class: org.netbeans.modules.xml.xdm.nodes.Element, value: java.util.ArrayList #349613
             <- node     - class: org.netbeans.modules.maven.model.pom.impl.ProfileImpl, value: org.netbeans.modules.xml.xdm.nodes.Element #22285
              <- [7]     - class: java.lang.Object[], value: org.netbeans.modules.maven.model.pom.impl.ProfileImpl #441
               <- elementData     - class: java.util.ArrayList, value: java.lang.Object[] #445525
                <- list     - class: java.util.Collections$UnmodifiableRandomAccessList, value: java.util.ArrayList #352873
                 <- [2]     - class: java.lang.Object[], value: java.util.Collections$UnmodifiableRandomAccessList #26232
                  <- elementData     - class: java.util.ArrayList, value: java.lang.Object[] #445524
                   <- cuts     - class: org.netbeans.modules.maven.navigator.POMModelVisitor$ListObjectCH, value: java.util.ArrayList #352872
                    <- holder     - class: org.netbeans.modules.maven.navigator.POMModelVisitor$PomListChildren, value: org.netbeans.modules.maven.navigator.POMModelVisitor$ListObjectCH #181
                     <- this$0     - class: org.netbeans.modules.maven.navigator.POMModelVisitor$PomListChildren$1, value: org.netbeans.modules.maven.navigator.POMModelVisitor$PomListChildren #107
                      <- [127]     - class: java.beans.PropertyChangeListener[], value: org.netbeans.modules.maven.navigator.POMModelVisitor$PomListChildren$1 #107
                       <- value     - class: java.util.HashMap$Node, value: java.beans.PropertyChangeListener[] #18904
                        <- [0]     - class: java.util.HashMap$Node[], value: java.util.HashMap$Node #640037
                         <- table     - class: java.util.HashMap, value: java.util.HashMap$Node[] #86872
                          <- map     - class: java.beans.PropertyChangeSupport$PropertyChangeListenerMap, value: java.util.HashMap #115027
                           <- map     - class: java.beans.PropertyChangeSupport, value: java.beans.PropertyChangeSupport$PropertyChangeListenerMap #11565
                            <- propertyChangeSupport     - class: org.netbeans.modules.maven.navigator.POMModelPanel$Configuration, value: java.beans.PropertyChangeSupport #11270
                             <- configuration     - class: org.netbeans.modules.maven.navigator.POMModelPanel, value: org.netbeans.modules.maven.navigator.POMModelPanel$Configuration #1
                              <- component     - class: org.netbeans.modules.maven.navigator.POMModelNavigator, value: org.netbeans.modules.maven.navigator.POMModelPanel #1
                               <- delegate     - class: org.netbeans.modules.navigator.LazyPanel, value: org.netbeans.modules.maven.navigator.POMModelNavigator #1
                                <- [0]     - class: java.lang.Object[], value: org.netbeans.modules.navigator.LazyPanel #4
                                 <- elementData     - class: java.util.ArrayList, value: java.lang.Object[] #175317
                                  <- list     - class: java.util.Collections$UnmodifiableRandomAccessList, value: java.util.ArrayList #110153
                                   <- delegate     - class: org.openide.util.lookup.ProxyLookup$LazyList, value: java.util.Collections$UnmodifiableRandomAccessList #20303
                                    <- value     - class: java.util.HashMap$Node, value: org.openide.util.lookup.ProxyLookup$LazyList #64
                                     <- [8]     - class: java.util.HashMap$Node[], value: java.util.HashMap$Node #638834
                                      <- table     - class: java.util.HashMap, value: java.util.HashMap$Node[] #65649
                                       <- contentTypes2Providers     - class: org.netbeans.modules.navigator.ProviderRegistry, value: java.util.HashMap #81567
                                        <- instance     - class: org.netbeans.modules.navigator.ProviderRegistry, value: org.netbeans.modules.navigator.ProviderRegistry #1

From what I can tell, `POMModelPanel` and thus its `Configuration` is intended to be a singleton, whereas `POMModelVisitor` is probably project-specific, so this looks like a classic listener memory leak.
Comment 1 Jesse Glick 2017-01-30 17:12:19 UTC
Created attachment 163509 [details]
Possible fix (not yet tested)
Comment 2 Jesse Glick 2017-02-02 00:06:50 UTC
Have been running with this patch and have not noticed any problems so far.
Comment 3 Tomas Stupka 2017-02-27 09:37:31 UTC
thanks for the patch
Comment 4 Tomas Stupka 2017-02-27 10:08:40 UTC
fixed in jet-main #5ca38de2cfb6
Comment 5 Quality Engineering 2017-03-01 02:52:06 UTC
Integrated into 'main-silver', will be available in build *201703010002* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)

Changeset: http://hg.netbeans.org/main-silver/rev/5ca38de2cfb6
User: Tomas Stupka <tstupka@netbeans.org>
Log: Issue #269686 - Memory leak in POMModelPanel