[jboss-cvs] JBossAS SVN: r61761 - projects/aop/trunk/aop/src/main/org/jboss/aop/advice.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 27 17:36:21 EDT 2007
Author: kabir.khan at jboss.com
Date: 2007-03-27 17:36:21 -0400 (Tue, 27 Mar 2007)
New Revision: 61761
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceBinding.java
Log:
[JBAOP-378] Optimization of InstanceAdvisor creation. Using a WeakHashMap with Advisors as the keys is LOADS faster than using a HashSet of WeakReferences and iterating over that when we need to do something
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceBinding.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceBinding.java 2007-03-27 20:50:44 UTC (rev 61760)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceBinding.java 2007-03-27 21:36:21 UTC (rev 61761)
@@ -25,10 +25,10 @@
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
@@ -54,7 +54,7 @@
protected String cflowString;
// not list because of redundancy caused by successive calls of ClassAdvisor.rebuildInterceptors
- protected Collection advisors = new HashSet();
+ protected Map advisors = new WeakHashMap();
protected InterceptorFactory[] interceptorFactories = new InterceptorFactory[0];
public AdviceBinding() {}
@@ -155,21 +155,7 @@
// we may be having in the future an Advisor per instance.
synchronized (advisors)
{
- if (advisors.size() > 0)
- {
- Iterator it = advisors.iterator();
- while (it.hasNext())
- {
- WeakReference ref = (WeakReference) it.next();
- Object obj = ref.get();
- if (obj == null) it.remove();
- else if(obj.equals(advisor))
- {
- return; // don't add duplicate advisor
- }
- }
- }
- advisors.add(new WeakReference(advisor));
+ advisors.put(advisor, Boolean.TRUE);
}
}
@@ -184,20 +170,7 @@
ArrayList list = new ArrayList(advisors.size());
synchronized (advisors)
{
- Iterator it = advisors.iterator();
- while (it.hasNext())
- {
- WeakReference ref = (WeakReference) it.next();
- Object advisor = ref.get();
- if (advisor != null)
- {
- list.add(advisor);
- }
- else
- {
- it.remove();
- }
- }
+ list.addAll(advisors.keySet());
}
return list;
}
@@ -206,17 +179,12 @@
{
synchronized (advisors)
{
- for (Iterator it = advisors.iterator(); it.hasNext();)
+ for (Iterator it = advisors.keySet().iterator(); it.hasNext();)
{
- WeakReference ref = (WeakReference) it.next();
- Object obj = ref.get();
- if (obj != null)
+ Advisor advisor = (Advisor) it.next();
+ if (advisor.getManager().isAdvisorRegistered(advisor))
{
- Advisor advisor = (Advisor) obj;
- if (advisor.getManager().isAdvisorRegistered(advisor))
- {
- advisor.removeAdviceBinding(this);
- }
+ advisor.removeAdviceBinding(this);
}
}
advisors.clear();
More information about the jboss-cvs-commits
mailing list