You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mi...@apache.org on 2006/11/17 00:35:58 UTC

svn commit: r475981 - in /xalan/java/trunk/src/org/apache: xalan/processor/ProcessorLRE.java xalan/templates/ElemLiteralResult.java xalan/templates/ElemTemplateElement.java xml/utils/ObjectPool.java xpath/axes/IteratorPool.java

Author: minchau
Date: Thu Nov 16 15:35:53 2006
New Revision: 475981

URL: http://svn.apache.org/viewvc?view=rev&rev=475981
Log:
Committing the patch in XALANJ-2336 which
uses an unsynchronized ArrayList in both ObjectPool
and IteratorPool rather than a synchronized Vector.

This is for performance reasons. Both of these types are
already synchronized on their public methods, so the old
code had unwanted synchronization.

ElemTemplateElement had two fields that were also Vectors that
were search (but not modified) at runtime. These were also
changed to ArrayList objects.

Modified:
    xalan/java/trunk/src/org/apache/xalan/processor/ProcessorLRE.java
    xalan/java/trunk/src/org/apache/xalan/templates/ElemLiteralResult.java
    xalan/java/trunk/src/org/apache/xalan/templates/ElemTemplateElement.java
    xalan/java/trunk/src/org/apache/xml/utils/ObjectPool.java
    xalan/java/trunk/src/org/apache/xpath/axes/IteratorPool.java

Modified: xalan/java/trunk/src/org/apache/xalan/processor/ProcessorLRE.java
URL: http://svn.apache.org/viewvc/xalan/java/trunk/src/org/apache/xalan/processor/ProcessorLRE.java?view=diff&rev=475981&r1=475980&r2=475981
==============================================================================
--- xalan/java/trunk/src/org/apache/xalan/processor/ProcessorLRE.java (original)
+++ xalan/java/trunk/src/org/apache/xalan/processor/ProcessorLRE.java Thu Nov 16 15:35:53 2006
@@ -20,7 +20,7 @@
  */
 package org.apache.xalan.processor;
 
-import java.util.Vector;
+import java.util.List;
 
 import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
@@ -355,12 +355,12 @@
 	
 	private boolean declaredXSLNS(Stylesheet stylesheet)
 	{
-		Vector declaredPrefixes = stylesheet.getDeclaredPrefixes();
+		List declaredPrefixes = stylesheet.getDeclaredPrefixes();
 		int n = declaredPrefixes.size();
 
 		for (int i = 0; i < n; i++)
 		{
-			XMLNSDecl decl = (XMLNSDecl) declaredPrefixes.elementAt(i);
+			XMLNSDecl decl = (XMLNSDecl) declaredPrefixes.get(i);
 			if(decl.getURI().equals(Constants.S_XSLNAMESPACEURL))
 				return true;
 		}

Modified: xalan/java/trunk/src/org/apache/xalan/templates/ElemLiteralResult.java
URL: http://svn.apache.org/viewvc/xalan/java/trunk/src/org/apache/xalan/templates/ElemLiteralResult.java?view=diff&rev=475981&r1=475980&r2=475981
==============================================================================
--- xalan/java/trunk/src/org/apache/xalan/templates/ElemLiteralResult.java (original)
+++ xalan/java/trunk/src/org/apache/xalan/templates/ElemLiteralResult.java Thu Nov 16 15:35:53 2006
@@ -30,18 +30,17 @@
 import org.apache.xalan.transformer.TransformerImpl;
 import org.apache.xml.serializer.SerializationHandler;
 import org.apache.xml.utils.StringVector;
-import org.apache.xml.utils.UnImplNode;
 import org.apache.xpath.XPathContext;
-import org.xml.sax.SAXException;
-import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
-import org.w3c.dom.DOMException;
 import org.w3c.dom.TypeInfo;
 import org.w3c.dom.UserDataHandler;
+import org.xml.sax.SAXException;
 
 /**
  * Implement a Literal Result Element.
@@ -399,7 +398,7 @@
    */
   boolean needToCheckExclude()
   {
-    if (null == m_excludeResultPrefixes && null == m_prefixTable
+    if (null == m_excludeResultPrefixes && null == getPrefixTable()
                 && m_ExtensionElementURIs==null     // JJK Bugzilla 1133
                 )
       return false;
@@ -407,8 +406,8 @@
     {
 
       // Create a new prefix table if one has not already been created.
-      if (null == m_prefixTable)
-        m_prefixTable = new Vector();
+      if (null == getPrefixTable())
+        setPrefixTable(new java.util.ArrayList());
 
       return true;
     }

Modified: xalan/java/trunk/src/org/apache/xalan/templates/ElemTemplateElement.java
URL: http://svn.apache.org/viewvc/xalan/java/trunk/src/org/apache/xalan/templates/ElemTemplateElement.java?view=diff&rev=475981&r1=475980&r2=475981
==============================================================================
--- xalan/java/trunk/src/org/apache/xalan/templates/ElemTemplateElement.java (original)
+++ xalan/java/trunk/src/org/apache/xalan/templates/ElemTemplateElement.java Thu Nov 16 15:35:53 2006
@@ -21,8 +21,9 @@
 package org.apache.xalan.templates;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Enumeration;
-import java.util.Vector;
+import java.util.List;
 
 import javax.xml.transform.SourceLocator;
 import javax.xml.transform.TransformerException;
@@ -808,7 +809,7 @@
    * The list of namespace declarations for this element only.
    * @serial
    */
-  private Vector m_declaredPrefixes;
+  private List m_declaredPrefixes;
 
   /**
    * Return a table that contains all prefixes available
@@ -817,7 +818,7 @@
    * @return Vector containing the prefixes available within this
    * element context 
    */
-  public Vector getDeclaredPrefixes()
+  public List getDeclaredPrefixes()
   {
     return m_declaredPrefixes;
   }
@@ -859,7 +860,7 @@
       String prefix = (String) decls.nextElement();
 
       if (null == m_declaredPrefixes)
-        m_declaredPrefixes = new Vector();
+        m_declaredPrefixes = new ArrayList();
 
       String uri = nsSupport.getURI(prefix);
 
@@ -869,7 +870,7 @@
       // System.out.println("setPrefixes - "+prefix+", "+uri);
       XMLNSDecl decl = new XMLNSDecl(prefix, uri, false);
 
-      m_declaredPrefixes.addElement(decl);
+      m_declaredPrefixes.add(decl);
     }
   }
 
@@ -911,7 +912,7 @@
 //      return Constants.S_XMLNAMESPACEURI;
 //    }
 
-    Vector nsDecls = m_declaredPrefixes;
+    List nsDecls = m_declaredPrefixes;
 
     if (null != nsDecls)
     {
@@ -923,7 +924,7 @@
 
       for (int i = 0; i < n; i++)
       {
-        XMLNSDecl decl = (XMLNSDecl) nsDecls.elementAt(i);
+        XMLNSDecl decl = (XMLNSDecl) nsDecls.get(i);
 
         if (prefix.equals(decl.getPrefix()))
           return decl.getURI();
@@ -949,7 +950,7 @@
    * and all parent elements, screened for excluded prefixes.
    * @serial
    */
-  Vector m_prefixTable;
+  private List m_prefixTable;
 
   /**
    * Return a table that contains all prefixes available
@@ -957,11 +958,15 @@
    *
    * @return reference to vector of {@link XMLNSDecl}s, which may be null.
    */
-  public Vector getPrefixes()
+  List getPrefixTable()
   {
     return m_prefixTable;
   }
   
+  void setPrefixTable(List list) {
+      m_prefixTable = list;
+  }
+  
   /**
    * Get whether or not the passed URL is contained flagged by
    * the "extension-element-prefixes" property.  This method is overridden 
@@ -1024,7 +1029,7 @@
   public void resolvePrefixTables() throws TransformerException
   {
     // Always start with a fresh prefix table!
-    m_prefixTable = null;
+    setPrefixTable(null);
 
     // If we have declared declarations, then we look for 
     // a parent that has namespace decls, and add them 
@@ -1040,7 +1045,7 @@
 
       for (int i = 0; i < n; i++)
       {
-        XMLNSDecl decl = (XMLNSDecl) m_declaredPrefixes.elementAt(i);
+        XMLNSDecl decl = (XMLNSDecl) m_declaredPrefixes.get(i);
         String prefix = decl.getPrefix();
         String uri = decl.getURI();
         if(null == uri)
@@ -1049,7 +1054,7 @@
 
         // Create a new prefix table if one has not already been created.
         if (null == m_prefixTable)
-          m_prefixTable = new Vector();
+            setPrefixTable(new ArrayList());
 
         NamespaceAlias nsAlias = stylesheet.getNamespaceAliasComposed(uri);
         if(null != nsAlias)
@@ -1066,7 +1071,7 @@
         else
           decl = new XMLNSDecl(prefix, uri, shouldExclude);
 
-        m_prefixTable.addElement(decl);
+        m_prefixTable.add(decl);
         
       }
     }
@@ -1077,13 +1082,13 @@
     {
 
       // The prefix table of the parent should never be null!
-      Vector prefixes = parent.m_prefixTable;
+      List prefixes = parent.m_prefixTable;
 
       if (null == m_prefixTable && !needToCheckExclude())
       {
 
         // Nothing to combine, so just use parent's table!
-        this.m_prefixTable = parent.m_prefixTable;
+        setPrefixTable(parent.m_prefixTable);
       }
       else
       {
@@ -1093,7 +1098,7 @@
         
         for (int i = 0; i < n; i++)
         {
-          XMLNSDecl decl = (XMLNSDecl) prefixes.elementAt(i);
+          XMLNSDecl decl = (XMLNSDecl) prefixes.get(i);
           boolean shouldExclude = excludeResultNSDecl(decl.getPrefix(),
                                                       decl.getURI());
 
@@ -1112,7 +1117,7 @@
     {
 
       // Must be stylesheet element without any result prefixes!
-      m_prefixTable = new Vector();
+      setPrefixTable(new ArrayList());
     }
   }
   
@@ -1128,14 +1133,14 @@
 
         for (int i = n - 1; i >= 0; i--)
         {
-          XMLNSDecl decl = (XMLNSDecl) m_prefixTable.elementAt(i);
+          XMLNSDecl decl = (XMLNSDecl) m_prefixTable.get(i);
 
           if (decl.getPrefix().equals(newDecl.getPrefix()))
           {
             return;
           }
         }
-      m_prefixTable.addElement(newDecl);    
+      m_prefixTable.add(newDecl);    
     
   }
   
@@ -1181,7 +1186,7 @@
 
         for (int i = n - 1; i >= 0; i--)
         {
-          XMLNSDecl decl = (XMLNSDecl) m_prefixTable.elementAt(i);
+          XMLNSDecl decl = (XMLNSDecl) m_prefixTable.get(i);
 
           if (!decl.getIsExcluded() && !(null != ignorePrefix && decl.getPrefix().equals(ignorePrefix)))
           {
@@ -1230,7 +1235,7 @@
 
         for (int i = 0; i < n; i++)
         {
-          XMLNSDecl decl = (XMLNSDecl) m_prefixTable.elementAt(i);
+          XMLNSDecl decl = (XMLNSDecl) m_prefixTable.get(i);
 
           if (!decl.getIsExcluded() && !(null != ignorePrefix && decl.getPrefix().equals(ignorePrefix)))
           {

Modified: xalan/java/trunk/src/org/apache/xml/utils/ObjectPool.java
URL: http://svn.apache.org/viewvc/xalan/java/trunk/src/org/apache/xml/utils/ObjectPool.java?view=diff&rev=475981&r1=475980&r2=475981
==============================================================================
--- xalan/java/trunk/src/org/apache/xml/utils/ObjectPool.java (original)
+++ xalan/java/trunk/src/org/apache/xml/utils/ObjectPool.java Thu Nov 16 15:35:53 2006
@@ -20,7 +20,7 @@
  */
 package org.apache.xml.utils;
 
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.xml.res.XMLErrorResources;
 import org.apache.xml.res.XMLMessages;
@@ -38,9 +38,9 @@
    *  @serial          */
   private final Class objectType;
 
-  /** Vector of given objects this points to.
+  /** Stack of given objects this points to.
    *  @serial          */
-  private final Vector freeStack;
+  private final ArrayList freeStack;
 
   /**
    * Constructor ObjectPool
@@ -50,7 +50,7 @@
   public ObjectPool(Class type)
   {
     objectType = type;
-    freeStack = new Vector();
+    freeStack = new ArrayList();
   }
   
   /**
@@ -69,7 +69,7 @@
     {
       throw new WrappedRuntimeException(cnfe);
     }
-    freeStack = new Vector();
+    freeStack = new ArrayList();
   }
 
 
@@ -83,7 +83,7 @@
   public ObjectPool(Class type, int size)
   {
     objectType = type;
-    freeStack = new Vector(size);
+    freeStack = new ArrayList(size);
   }
 
   /**
@@ -93,7 +93,7 @@
   public ObjectPool()
   {
     objectType = null;
-    freeStack = new Vector();
+    freeStack = new ArrayList();
   }
 
   /**
@@ -110,10 +110,7 @@
     {
 
       // Remove object from end of free pool.
-      Object result = freeStack.lastElement();
-
-      freeStack.setSize(freeStack.size() - 1);
-
+      Object result = freeStack.remove(freeStack.size() - 1);
       return result;
     }
 
@@ -148,9 +145,7 @@
     {
 
       // Remove object from end of free pool.
-      Object result = freeStack.lastElement();
-
-      freeStack.setSize(freeStack.size() - 1);
+      Object result = freeStack.remove(freeStack.size() - 1);
 
       return result;
     }
@@ -169,7 +164,7 @@
     // Remove safety.  -sb
     // if (objectType.isInstance(obj))
     // {
-    freeStack.addElement(obj);
+    freeStack.add(obj);
     // }
     // else
     // {

Modified: xalan/java/trunk/src/org/apache/xpath/axes/IteratorPool.java
URL: http://svn.apache.org/viewvc/xalan/java/trunk/src/org/apache/xpath/axes/IteratorPool.java?view=diff&rev=475981&r1=475980&r2=475981
==============================================================================
--- xalan/java/trunk/src/org/apache/xpath/axes/IteratorPool.java (original)
+++ xalan/java/trunk/src/org/apache/xpath/axes/IteratorPool.java Thu Nov 16 15:35:53 2006
@@ -20,7 +20,7 @@
  */
 package org.apache.xpath.axes;
 
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.xml.dtm.DTMIterator;
 import org.apache.xml.utils.WrappedRuntimeException;
@@ -29,17 +29,19 @@
  * Pool of object of a given type to pick from to help memory usage
  * @xsl.usage internal
  */
-public class IteratorPool implements java.io.Serializable
+public final class IteratorPool implements java.io.Serializable
 {
     static final long serialVersionUID = -460927331149566998L;
 
-  /** Type of objects in this pool.
-   *  @serial          */
+  /** 
+   * Type of objects in this pool.
+   */
   private final DTMIterator m_orig;
 
-  /** Vector of given objects this points to.
-   *  @serial          */
-  private final Vector m_freeStack;
+  /** 
+   * Stack of given objects this points to.
+   */
+  private final ArrayList m_freeStack;
 
   /**
    * Constructor IteratorPool
@@ -49,7 +51,7 @@
   public IteratorPool(DTMIterator original)
   {
     m_orig = original;
-    m_freeStack = new Vector();
+    m_freeStack = new ArrayList();
   }
   
   /**
@@ -70,10 +72,7 @@
     else
     {
       // Remove object from end of free pool.
-      DTMIterator result = (DTMIterator)m_freeStack.lastElement();
-
-      m_freeStack.setSize(m_freeStack.size() - 1);
-
+      DTMIterator result = (DTMIterator)m_freeStack.remove(m_freeStack.size() - 1);
       return result;
     }
   }
@@ -102,10 +101,7 @@
     else
     {
       // Remove object from end of free pool.
-      DTMIterator result = (DTMIterator)m_freeStack.lastElement();
-
-      m_freeStack.setSize(m_freeStack.size() - 1);
-
+      DTMIterator result = (DTMIterator)m_freeStack.remove(m_freeStack.size() - 1);
       return result;
     }
   }
@@ -118,6 +114,6 @@
    */
   public synchronized void freeInstance(DTMIterator obj)
   {
-    m_freeStack.addElement(obj);
+    m_freeStack.add(obj);
   }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org