[mdr-users] Performance problem with UML2 metamodel
Matthias Bohlen <[email protected]> Fri, 20 Jan 2006 11:15:53 +0100
| Newsgroups | gmane.comp.java.netbeans.modules.mdr.user |
|---|---|
| Message-ID | <[email protected]> |
Hi,
I am trying to make MDR work with a UML2 metamodel based on MOF1
because we want to run AndroMDA with UML2 models from MagicDraw 10.
I have successfully loaded the metamodel into MDR (took about 3-4
seconds). Then, I called
org.netbeans.api.mdr.MDRepository.createExtent("model", metaModel)
which surprisingly takes more than 60 seconds!
I ran the same thing in the debugger and suspended the thread. It
turns out that MDR is calling a classloader a very large number of
times, each time running through a lot of code:
String.indexOf(char[], int, int, char[], int, int, int) line: not available
String.indexOf(String, int) line: not available
String.indexOf(String) line: not available
Handler(URLStreamHandler).parseURL(URL, String, int, int) line: not available
Handler.parseURL(URL, String, int, int) line: not available
URL.<init>(URL, String, URLStreamHandler) line: not available
URL.<init>(URL, String) line: not available
URLClassPath$FileLoader.getResource(String, boolean) line: not available
URLClassPath.getResource(String, boolean) line: not available
URLClassLoader$1.run() line: not available
AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) line: not available [native method]
Launcher$AppClassLoader(URLClassLoader).findClass(String) line: not available
Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not available
Launcher$AppClassLoader.loadClass(String, boolean) line: not available
MDRClassLoader$Delegator(ClassLoader).loadClass(String, boolean) line: not available
MDRClassLoader$Delegator.accessibleLoadClass(String, boolean) line: 236
MDRClassLoader.loadClass(String, boolean) line: 128
MDRClassLoader(ClassLoader).loadClass(String) line: not available
MDRClassLoader(ClassLoader).loadClassInternal(String) line: not available
Class.forName0(String, boolean, ClassLoader) line: not available [native method]
Class.forName(String, boolean, ClassLoader) line: not available
BaseObjectHandler.resolveImplementation(String) line: 185
StorableClass.resolveClass(String) line: 576
StorableClass.resolveClass(StorableClass, int) line: 572
StorableClass.initInstanceSuperclass(Class[]) line: 586
StorableClass.initInstanceSuperclass(Class[]) line: 594
NBMDRepositoryImpl.resolveSuperclasses(MofPackage, List) line: 925
NBMDRepositoryImpl.instantiatePackage(String, StorablePackage, MofPackage, Map, String, boolean) line: 811
NBMDRepositoryImpl.createExtent(String, RefObject, RefPackage[], String) line: 486
NBMDRepositoryImpl.createExtent(String, RefObject, RefPackage[]) line: 291
NBMDRepositoryImpl.createExtent(String, RefObject) line: 279
When I inspect the following stack frame
StorableClass.resolveClass(String) line: 576
I see that
className= "org.netbeans.jmiimpl.omg.uml2.support.communications.MessageEventImpl"
Profiling shows that MDRClassLoader$Delegator.accessibleLoadClass is
called 44600 times using about 2 milliseconds for each call which adds
up to 92 seconds alone.
What is happening here???
Cheers
Matthias at AndroMDA.org