Home arrow XML arrow Page 2 - Java and XML Basics, Part 3
XML

Java and XML Basics, Part 3


So far, during this series of articles (part 1, part 2) we've looked at DOM and SAX, and I suppose most of you are thinking which one of the two approaches is preferable? Well, there is no general rule of thumb, but this article might help you make the right decision when you’ll have to.

Author Info:
By: Liviu Tudor
Rating: 5 stars5 stars5 stars5 stars5 stars / 25
April 20, 2004
TABLE OF CONTENTS:
  1. · Java and XML Basics, Part 3
  2. · Which One is the Better One to Use?
  3. · Running the Parser
  4. · Problems with Big XML Files
  5. · Validating Parsers - DOM
  6. · Where do We Get a Validating Parser?
  7. · ErrorHandler
  8. · Validating Parsers - SAX
  9. · Conclusion

print this article
SEARCH DEVARTICLES

Java and XML Basics, Part 3 - Which One is the Better One to Use?
(Page 2 of 9 )

The latter question though is not that easy to answer; while in most cases choosing in between SAX and DOM proves to be a matter of tastes with some programmers, we are going to look at some speed and performance comparisons in between the two of them. While there are complex ways to evaluate the performance of a computer program, we are only going to refer to two main factors:

  • Memory consumption
  • Execution speed

For this we have modified the SimpleDOMParser3.java and SimpleSAXParser6.java files and added some lines to measure the execution time and the memory usage as it can be seen:

SimpleDOMParser4.java


/**
 * Parse the document now
 */

System
.gc();
long tmStart 
System.currentTimeMillis();
long memStart 
Runtime.getRuntime().freeMemory();
try
{
 doc 
builder.parseisXML );
}
catch
IOException ioe )
{
 System
.err.println"I/O error while reading from file:" );
 ioe
.printStackTrace();
 System
.exit( );
}
catch
org.xml.sax.SAXException saxe )
{
 System
.err.println"Parsing error:" );
 saxe
.printStackTrace();
 
System.exit( );
}
System
.gc();
long tmEndParse 
System.currentTimeMillis();
long memEnd 
Runtime.getRuntime().freeMemory();
System
.out.println"Parsing took : " + (tmEndParse tmStart) + " msec" );
System
.out.println"Memory occupied : " + (memStart memEnd) + " bytes" );

SimpleSAXParser7.java


/**
 * Parse the document now
 */

System
.gc();
long tmStart 
System.currentTimeMillis();
long memStart 
Runtime.getRuntime().freeMemory();
try
{
 sax
.parseisXML, new SimpleSAXParser7() );
}
catch
IOException ioe )
{
 System
.err.println"I/O error while reading from file:" );
 ioe
.printStackTrace();
 System
.exit( );
}
catch
org.xml.sax.SAXException saxe )
{
 System
.err.println"Parsing error:" );
 saxe
.printStackTrace();
 System
.exit( );
}
System
.out.println();
System
.gc();
long tmEnd 
System.currentTimeMillis();
long memEnd 
Runtime.getRuntime().freeMemory();
System
.out.println"Parsing took " + (tmEnd tmStart) + " msec" );
System
.out.println"Memory occupied " + (memStart memEnd) + " bytes" );

As you can see we don't do any fancy time estimation, just base everything on the computer clock and measure the number of milliseconds it takes for the process to finish -- of course in this process we don't just execute parsing code but a few other things as well (check for exceptions etc.), but we consider the time spent on executing these instructions as irrelevant -- and even if it were, nearly the same code appears in both files!

Also, to have an estimate of the memory occupied, we just compare the available free memory (in bytes) before and after the parsing. Again, in this process memory can be occupied not just by the variables and structures involved in parsing but by Java internal structures too (buffers, stacks, unclaimed memory blocks etc.). To make the result look closer to reality, we are suggesting to the interpreter that the garbage collection should be kicked off before and right after the parsing -- this will give a more accurate figure of the memory available. Of course, there is no way to enforce garbaged memory recollection, however, as we are running in a single-user single-threaded non-stressful environment, we can assume that in most cases garbage collection will take place when we have queued up the request.


blog comments powered by Disqus
XML ARTICLES

- Open XML Finally Supported by MS Office
- XML Features Added to Two Systems
- Using Regions with XSL Formatting Objects
- Using XSL Formatting Objects
- More Schematron Features
- Schematron Patterns and Validation
- Using Schematron
- Datatypes and More in RELAX NG
- Providing Options in RELAX NG
- An Introduction to RELAX NG
- Path, Predicates, and XQuery
- Using Predicates with XQuery
- Navigating Input Documents Using Paths
- XML Basics
- Introduction to XPath

Watch our Tech Videos 
Dev Articles Forums 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
Contact Us 
Site Map 
Privacy Policy 
Support 

Developer Shed Affiliates

 




© 2003-2017 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap
Popular Web Development Topics
All Web Development Tutorials