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.
WeakHashMap in DiffSidebarManager is not working as the keys (instancesof org.openide.text.QuietEditorPane) are strongly held by associated values (org.netbeans.modules.versioning.diff.DiffSidebar). This obviously causes huge memory leaks - editor cannot be closed and they hold a lot of other objects.
Path holding the key - Static reference from org.netbeans.modules.versioning.diff.DiffSidebarManager.instance (from class org.netbeans.modules.versioning.diff.DiffSidebarManager) : --> org.netbeans.modules.versioning.diff.DiffSidebarManager@0x8741c280 (13 bytes) (field sideBars:) --> java.util.WeakHashMap@0x874208f8 (44 bytes) (field table:) --> [Ljava.util.WeakHashMap$Entry;@0x87424068 (72 bytes) (Element 15 of [Ljava.util.WeakHashMap$Entry;@0x87424068:) --> java.util.WeakHashMap$Entry@0x88ac2eb8 (36 bytes) (field next:) --> java.util.WeakHashMap$Entry@0x886f4aa8 (36 bytes) (field value:) --> org.netbeans.modules.versioning.diff.DiffSidebar@0x886f6f38 (377 bytes) (field textComponent:) --> org.openide.text.QuietEditorPane@0x886f3950 (451 bytes)
I tried to only weakly reference the sidebar but the problem persists ... is the following reference OK or should I or someone else investigate further? After closing editor TopComponent, Diff Sidebar not collected: static java.util.Map org.netbeans.editor.BaseKit.kitActions-> java.util.HashMap@5c9404-> [Ljava.util.HashMap$Entry;@5556af-> java.util.HashMap$Entry@1fd4b0b-> [Ljavax.swing.Action;@1d552d4-> org.netbeans.editor.ActionFactory$FindSelectionAction@19aef85-> javax.swing.event.SwingPropertyChangeSupport@18f8a24-> sun.awt.EventListenerAggregate@1f71df7-> [Ljava.beans.PropertyChangeListener;@12f2d00-> javax.swing.AbstractButton$ButtonActionPropertyChangeListener@134852d-> org.netbeans.modules.editor.NbEditorToolBar$WrapperAction@95940c-> org.netbeans.modules.editor.NbEditorToolBar@12e76db-> [Ljava.awt.Component;@152886a-> org.openide.awt.Actions$ToolbarButton@13cb1cb-> javax.swing.event.EventListenerList@124b1bb-> [Ljava.lang.Object;@ce725-> org.openide.util.actions.NodeAction$DelegateAction@1a47d8b-> org.openide.util.lookup.ProxyLookup$R@18b8ec7-> org.openide.windows.DefaultTopComponentLookup@325c32-> org.openide.text.CloneableEditor@18d604f-> org.openide.text.QuietEditorPane@11c3366-> javax.swing.JViewport@7025de-> javax.swing.JScrollPane@19d3901-> javax.swing.JViewport@1fb9eb3-> [Ljava.awt.Component;@18ca05c-> org.netbeans.modules.editor.CustomizableSideBar@72aebc-> [Ljava.awt.Component;@1500c94-> org.netbeans.modules.versioning.diff.DiffSidebar@550344
Probably this is worth of another issue. I guess there will be only one component held this way (or one per MIME type?). One place where we can cut this chain IMO is between action and tooblar by removing listener if toolbar gets closed.
Fixed by removing strong references from DiffManager to DiffSidebar. Radim: please also check the reference I mentioned. /shared/data/ccvs/repository/versioncontrol/src/org/netbeans/modules/versioning/diff/DiffSidebarManager.java,v <-- DiffSidebarManager.java new revision: 1.2; previous revision: 1.1