JBoss development,
A new message was posted in the thread "Profiling the dependency project":
http://community.jboss.org/message/525701#525701
Author : Kabir Khan
Profile :
http://community.jboss.org/people/kabir.khan@jboss.com
Message:
--------------------------------------------------------------
I tried indexing the dependencies by state since a lot of time is spent iterating over the
dependencies to determine the unresolved dependencies, however this had an adverse effect,
making it a bit slower
$svn diff
Index: dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyInfo.java
===================================================================
---
dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyInfo.java (revision
100812)
+++
dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyInfo.java (working
copy)
@@ -24,7 +24,9 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -64,6 +66,10 @@
/** Whether this is an autowire candidate */
private boolean autowireCandidate = true;
+ private Map<ControllerState, Set<DependencyItem>> iDependOnByState = new
ConcurrentHashMap<ControllerState, Set<DependencyItem>>(5, .75f, 1);
+
+// private static final ControllerState NULL_CONTROLLER_STATE =
ControllerState.newState("Null_AbstractDependencyInfo");
+
/**
* Create an abstract dependency info
*/
@@ -90,12 +96,34 @@
public void addIDependOn(DependencyItem dependency)
{
iDependOn.add(dependency);
+
+ if (dependency.getWhenRequired() == null)
+ return;
+
+ Set<DependencyItem> dependOnForState =
iDependOnByState.get(dependency.getWhenRequired());
+ if (dependOnForState == null)
+ {
+ dependOnForState = new CopyOnWriteArraySet<DependencyItem>();
+ Set<DependencyItem> old =
iDependOnByState.put(dependency.getWhenRequired(), dependOnForState);
+ if (old != null)
+ dependOnForState = old;
+ }
+ dependOnForState.add(dependency);
+
flushJBossObjectCache();
}
public void removeIDependOn(DependencyItem dependency)
{
iDependOn.remove(dependency);
+
+ if (dependency.getWhenRequired() == null)
+ return;
+
+ Set<DependencyItem> dependOnForState =
iDependOnByState.get(dependency.getWhenRequired());
+ if (dependOnForState != null)
+ dependOnForState.remove(dependency);
+
flushJBossObjectCache();
}
@@ -147,24 +175,61 @@
if (iDependOn.isEmpty())
return Collections.emptySet();
+ //Old way
+// Set<DependencyItem> result = null;
+// for (DependencyItem item : iDependOn)
+// {
+// if (state == null || state.equals(item.getWhenRequired()))
+// {
+// if (item.isResolved() == false)
+// {
+// if (result == null)
+// result = new HashSet<DependencyItem>();
+// result.add(item);
+// }
+// }
+// }
+
+ //New way
Set<DependencyItem> result = null;
- for (DependencyItem item : iDependOn)
+ if (state != null)
{
- if (state == null || state.equals(item.getWhenRequired()))
+ Set<DependencyItem> dependenciesForState = iDependOnByState.get(state);
+ if (dependenciesForState != null)
{
- if (item.isResolved() == false)
+ for (DependencyItem item : dependenciesForState)
{
- if (result == null)
- result = new HashSet<DependencyItem>();
- result.add(item);
+ if (item.isResolved() == false)
+ {
+ if (result == null)
+ result = new HashSet<DependencyItem>();
+ result.add(item);
+ }
}
}
}
+ else
+ {
+ for (DependencyItem item : iDependOn)
+ {
+ if (state == null)
+ {
+ if (item.isResolved() == false)
+ {
+ if (result == null)
+ result = new HashSet<DependencyItem>();
+ result.add(item);
+ }
+ }
+ }
+ }
+
+
if (result == null)
return Collections.emptySet();
return result;
}
-
+
public <T> void addInstallItem(CallbackItem<T> callbackItem)
{
installCallbacks.add(callbackItem);
--------------------------------------------------------------
To reply to this message visit the message page:
http://community.jboss.org/message/525701#525701