You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Carlo Marchiori (JIRA)" <xa...@xml.apache.org> on 2005/05/10 09:04:04 UTC

[jira] Updated: (XALANJ-2117) OutOfMemoryError in a few seconds due to the thread local cache of SAXParser instances

     [ http://issues.apache.org/jira/browse/XALANJ-2117?page=all ]

Carlo Marchiori updated XALANJ-2117:
------------------------------------

    Attachment: src.zip

A complete example causing the OutOfMemoryError. The code is in my opinion completely legal as of JAXP, so the crash should not happen.

> 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: xalan-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-dev-help@xml.apache.org