contention during XMLReaderFactory.createXMLReader

2013-11-12 Thread Andrew Welch
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 <= 1; 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: j-users-unsubscr...@xerces.apache.org
For additional commands, e-mail: j-users-h...@xerces.apache.org



Re: contention during XMLReaderFactory.createXMLReader

2013-11-12 Thread Michael Glavassevich
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: mrgla...@ca.ibm.com
E-mail: mrgla...@apache.org

Andrew Welch  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 <= 1; 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: j-users-unsubscr...@xerces.apache.org
> For additional commands, e-mail: j-users-h...@xerces.apache.org


-
To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
For additional commands, e-mail: j-users-h...@xerces.apache.org