Re: contention during XMLReaderFactory.createXMLReader

Michael Glavassevich <[email protected]>
Newsgroups gmane.text.xml.xerces-j.user
Message-ID <OF8863C7D7.D4ABF5FF-ON85257C21.00695341-85257C21.006A1080@ca.ibm.com>
Hi Andrew,

Creating a new XML parser can be very expensive. The ClassLoader used to 
create the parser and its internal components might block or spend a long 
time searching its "classpath" for META-INF/services files. This is why 
it's generally a good idea to cache and reuse [1] XML parser instances.

Thanks.

[1] 
http://www.ibm.com/developerworks/xml/library/x-perfap2/index.html#reuse

Michael Glavassevich
XML Technologies and WAS Development
IBM Toronto Lab
E-mail: [email protected]
E-mail: [email protected]

Andrew Welch <[email protected]> wrote on 11/12/2013 07:48:47 AM:

> Hi,
> 
> A colleague was doing some performance testing and discovered some
> contention at this line of my code:
> 
> XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
> 
> ...which was surprising : ) He informed me it was doing a blocking
> operation every time.
> 
> Anyway, he went away and went through the Xerces source and found that
> if the "org.apache.xerces.xni.parser.XMLParserConfiguration" system
> property is not set it does indeed do a blocking operation (in
> parsers.ObjectFactory)
> 
> To demonstrate this, run the below code with and without the system
> property set:
> 
> public static void main(String... args) throws Exception {
> 
>     //System.setProperty
> ("org.apache.xerces.xni.parser.XMLParserConfiguration",
>     //        "org.apache.xerces.parsers.XIncludeParserConfiguration");
> 
>     long start = System.nanoTime();
> 
>     for (int i = 0; i <= 10000; i++) {
>         XMLReaderFactory.createXMLReader
> ("org.apache.xerces.parsers.SAXParser");
>     }
> 
>     long end = System.nanoTime();
>     double millis = (end - start) * 1e-6;
> 
>     System.out.println(millis);
> 
> }
> 
> On my machine it consistently takes around ~2000ms without the system
> property, and ~1300ms with.
> 
> This is present in both 2.9 and 2.11 as far as I can see.
> 
> 
> 
> 
> -- 
> Andrew Welch
> http://andrewjwelch.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.