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 110850 - Reverse engineered UML extremely slow.
Summary: Reverse engineered UML extremely slow.
Status: RESOLVED DUPLICATE of bug 108838
Alias: None
Product: uml
Classification: Unclassified
Component: General Diagram (show other bugs)
Version: 6.x
Hardware: PC All
: P1 blocker (vote)
Assignee: issues@uml
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-07-25 00:48 UTC by bridou
Modified: 2007-07-25 01:25 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description bridou 2007-07-25 00:48:46 UTC
I have a Java source project with around a 150 classes in it's source includes. I based a reverse engineered UML project
on it. Each action taken on new diagrams (so far only tried class and sequence diagrams) takes a very long time.
Generating a sequence diagram (10 objects with around 8 calls/loops) takes approximately 10 minutes. Performing actions
in class diagrams is slow, simply moving a class in the diagrams takes more than 5 seconds from the first click to the
object actually moving. This seems to apply to almost any action taken (creating/deleting dependencies, right click
menu, dropping a new class into the diagram...). The CPU utilization is at a 100% during the entire time. Such
unresponsiveness makes the UML plugin close to unusable. This is using a 3.4 GHz Pentium, 3GB Memory running jdk 1.6_02
JVM with netbeans 6.0M10 full installation.

Inspecting the process with JConsole shows that memory is not a problem, only 250Mb are used out of a max heap of 1 Gb.
Examining the different threads, it seems that the AWT dispatcher is always stuck in the XMLManip.findElementByID method
as shown in the example below. I think this methods should be revisited to as it would seem to yield very poor
performance on what I think is a fairly small diagram/code base.


org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.AbstractBranch.elementID(AbstractBranch.java:294)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:236)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.DefaultDocument.elementByID(DefaultDocument.java:369)
org.netbeans.modules.uml.core.support.umlsupport.XMLManip.findElementByID(XMLManip.java:121)
org.netbeans.modules.uml.core.typemanagement.TypeManager.findByID(TypeManager.java:1984)
org.netbeans.modules.uml.core.typemanagement.TypeManager.getRawElementByID(TypeManager.java:1944)
org.netbeans.modules.uml.core.metamodel.core.foundation.UMLXMLManip.findInProject(UMLXMLManip.java:1400)
org.netbeans.modules.uml.core.metamodel.core.foundation.UMLXMLManip.findElementByID(UMLXMLManip.java:1364)
org.netbeans.modules.uml.core.support.umlutils.ElementLocator.findByID(ElementLocator.java:196)
org.netbeans.modules.uml.core.support.umlutils.ElementLocator.findElementByID(ElementLocator.java:214)
org.netbeans.modules.uml.core.metamodel.core.foundation.ProxyElement.getElement(ProxyElement.java:71)
org.netbeans.modules.uml.ui.controls.projecttree.ProjectTreeItemImpl.getModelElement(ProjectTreeItemImpl.java:160)
org.netbeans.modules.uml.project.ui.nodes.UMLModelElementNode.getElement(UMLModelElementNode.java:361)
...
Comment 1 Viktor Lapitski 2007-07-25 00:57:19 UTC
could you please provide the info on the build you're using. 
Specifically is the build is post Jul 11, ie. does the build have 
the openide/nodes fix mentioned in IZ 108994 ? 
What are the full the stack trace in your case, ie. does it have 
line something like this
...
        at org.openide.nodes.FilterNode.equals(FilterNode.java:864)
...
before the part of the stack trace you've provided?
Comment 2 bridou 2007-07-25 01:10:10 UTC
I will try and upgrade to a nightly build, however the plugin manager is not inclined to let me do it so far.

The UML plugin information is as follows:
Date: 6/28/07 
Source: NetBeans IDE 6.0 M10 (build 200706281431)

Here is the entire information from jconsole:

Name: AWT-EventQueue-1
State: RUNNABLE
Total blocked: 15,442  Total waited: 286,815

Stack trace: 
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.DefaultElement.getDocument(DefaultElement.java:121)
org.dom4j.tree.AbstractBranch.elementID(AbstractBranch.java:294)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:236)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.AbstractBranch.elementByID(AbstractBranch.java:241)
org.dom4j.tree.DefaultDocument.elementByID(DefaultDocument.java:369)
org.netbeans.modules.uml.core.support.umlsupport.XMLManip.findElementByID(XMLManip.java:121)
org.netbeans.modules.uml.core.typemanagement.TypeManager.findByID(TypeManager.java:1984)
org.netbeans.modules.uml.core.typemanagement.TypeManager.getRawElementByID(TypeManager.java:1944)
org.netbeans.modules.uml.core.metamodel.core.foundation.UMLXMLManip.findInProject(UMLXMLManip.java:1400)
org.netbeans.modules.uml.core.metamodel.core.foundation.UMLXMLManip.findElementByID(UMLXMLManip.java:1364)
org.netbeans.modules.uml.core.support.umlutils.ElementLocator.findByID(ElementLocator.java:196)
org.netbeans.modules.uml.core.support.umlutils.ElementLocator.findElementByID(ElementLocator.java:214)
org.netbeans.modules.uml.core.metamodel.core.foundation.ProxyElement.getElement(ProxyElement.java:71)
org.netbeans.modules.uml.ui.controls.projecttree.ProjectTreeItemImpl.getModelElement(ProjectTreeItemImpl.java:160)
org.netbeans.modules.uml.project.ui.nodes.UMLModelElementNode.getElement(UMLModelElementNode.java:361)
org.netbeans.modules.uml.project.ui.nodes.UMLModelElementNode.equals(UMLModelElementNode.java:428)
org.netbeans.modules.uml.core.eventframework.EventManager.indexOf(EventManager.java:93)
org.netbeans.modules.uml.core.eventframework.EventManager.addListener(EventManager.java:46)
org.netbeans.modules.uml.core.metamodel.core.foundation.ElementChangeEventDispatcher.registerForNamedElementEvents(ElementChangeEventDispatcher.java:228)
org.netbeans.modules.uml.ui.support.DispatchHelper.registerForNamedElementEvents(DispatchHelper.java:875)
org.netbeans.modules.uml.project.ui.nodes.UMLModelElementNode.initialize(UMLModelElementNode.java:116)
org.netbeans.modules.uml.project.ui.nodes.UMLModelElementNode.<init>(UMLModelElementNode.java:76)
org.netbeans.modules.uml.project.ui.nodes.NBNodeFactory.createElementNode(NBNodeFactory.java:77)
org.netbeans.modules.uml.ui.support.projecttreesupport.ProjectTreeBuilderImpl.createChildTreeElement(ProjectTreeBuilderImpl.java:1404)
org.netbeans.modules.uml.ui.support.projecttreesupport.ProjectTreeBuilderImpl.buildFolderChildrenFromObject(ProjectTreeBuilderImpl.java:1019)
org.netbeans.modules.uml.ui.support.projecttreesupport.ProjectTreeBuilderImpl.retrieveChildItemsForFolder(ProjectTreeBuilderImpl.java:216)
org.netbeans.modules.uml.ui.support.projecttreesupport.ProjectTreeBuilderImpl.retrieveChildItems(ProjectTreeBuilderImpl.java:123)
org.netbeans.modules.uml.ui.support.projecttreesupport.ProjectTreeBuilderImpl.retrieveChildItemsSorted(ProjectTreeBuilderImpl.java:386)
org.netbeans.modules.uml.ui.products.ad.projecttreedefaultengine.ADProjectTreeEngine.retrieveChildItems(ADProjectTreeEngine.java:1971)
org.netbeans.modules.uml.ui.products.ad.projecttreedefaultengine.ADProjectTreeEngine.verifyChildConsistency(ADProjectTreeEngine.java:748)
org.netbeans.modules.uml.ui.products.ad.projecttreedefaultengine.ADProjectTreeEngine.updateTree(ADProjectTreeEngine.java:683)
org.netbeans.modules.uml.ui.products.ad.projecttreedefaultengine.ADProjectTreeEngine$UpdateItemsRunnable.execute(ADProjectTreeEngine.java:636)
org.netbeans.modules.uml.ui.products.ad.projecttreedefaultengine.ADProjectTreeEngine$UpdateItemsRunnable.execute(ADProjectTreeEngine.java:530)
org.netbeans.modules.uml.ui.support.BatchProcessRunnable.run(BatchProcessRunnable.java:90)
java.lang.Thread.run(Thread.java:619)
org.netbeans.modules.uml.ui.products.ad.projecttreedefaultengine.ADProjectTreeEngine$1.run(ADProjectTreeEngine.java:518)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Comment 3 Viktor Lapitski 2007-07-25 01:25:43 UTC
thank you very much for the prompt and complete response. 
The stack trace is an exact copy of the stack trace 
reported in the IZ 108838 (fixed on 07/04/07). 

Please do upgrade to current build - the functionality in the current
builds has many bug fixes made during last month.


*** This issue has been marked as a duplicate of 108838 ***