[ 
http://issues.apache.org/jira/browse/XALANJ-2117?page=comments#action_64818 ]
     
Carlo Marchiori commented on XALANJ-2117:
-----------------------------------------

At least the m_inUse variable of XMLReaderManager instances should be turned 
into a WeakHashMap (now it is simply an HashMap), so that, when a thread dies 
and is garbage collected, the associated parser (through the ThreadLocal 
m_readers variable) is not prevented from being garbage collected.

Otherwise caching may be completely turned off. Is parser creation such a 
resource demanding operation? parserfactory creation is, because there is the 
service api mechanism, which may imply reading an external file. So the cache 
may be restricted to the parserfactory.

This bug is related to bug 1980 
(http://issues.apache.org/jira/browse/XALANJ-1980). When I analyzed the 
Websphere memorydump using the HeapWizard program, I obtained the same results 
described there (namely abundance of AxesWalker objects as heap roots). These 
results are in my opinion an HeapWizard misrepresentation. When I actually 
analyzed the same memorydump using HeapAnalyzer, a similar tool supported by 
IBM, it gave me a completely differente picture, in which the memory leak is 
correctly assigned to the parser cache.


> OutOfMemoryError in a few seconds due to the thread local cache of SAXParser 
> instances
> --------------------------------------------------------------------------------------
>
>          Key: XALANJ-2117
>          URL: http://issues.apache.org/jira/browse/XALANJ-2117
>      Project: XalanJ2
>         Type: Bug
>   Components: Xalan
>     Versions: 2.6
>  Environment: generic
>     Reporter: Carlo Marchiori
>  Attachments: src.zip
>
> This simple program causes an OutOfMemoryError in a few seconds due to the 
> thread local cache of SAXParser instances (see XmlReaderManager class).
> The problem is particularly annoying when threads are often created (because 
> the server is under heavy load, because application exceptions kill existing 
> threads, because applications create short live threads in which to perform 
> transformations, because...)
> ---------------------------------------------------------------------
> import javax.xml.transform.Source;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.TransformerFactoryConfigurationError;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
> public class Prova
> {
>     
>     public static void main (String[] args) throws Exception, 
> TransformerFactoryConfigurationError
>     {
>         final TransformerFactory newInstance = 
> TransformerFactory.newInstance();
>         final Object monitor = new Object ();
>         
>         for (;;)
>         {
>             synchronized (monitor)
>             {
>                   new Thread ()
>                   {
>                       public void run ()
>                       {
>                           try
>                           {
>                               synchronized (monitor)
>                               {                               
>                                       Source xsl = new StreamSource 
> ("prova.xsl");
>                                       Transformer transformer = 
> newInstance.newTransformer(xsl);
>                                       Source xml = new StreamSource 
> ("prova.xml");
>                                       transformer.transform(xml, new 
> StreamResult ("ouput.xml"));
>                                       monitor.notify();
>                               }
>                           }
>                           catch (Exception e)
>                           {
>                               e.printStackTrace();
>                               System.exit(1);
>                           }
>                       }
>                   }.start();
>                   monitor.wait();
>                   Thread.yield();
>             }
>             
>         }
>     }
> }
> ---------------------------------------------------------------------

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to