[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