JDOM2 Performance

Java manipulation of XML made easy.

The following is a basic metric of the performance characteristics of JDOM2. This is not meant to be a reproducable baseline, rather, it is intended to give an idea of whether a change has improved or decreased the performance.

Running this test on different computers is meaningless. You need to run the same tests on different code to compare the code changes, not the computers.

For some sense of consistency, I have chosen 'hamlet' as a base XML document to test. It is available for free on ibiblio. The raw Hamlet is not actually valid XML (go figure), as you need to change the XML declaration to lower-case.

There is 'working' copy of Hamlet in contrib/src/resources/hamlet.xml

The code used to compute the benchmark does a few things, it measures a number of metrics. For the parse times it compares 4 input mechanisms, SAX, DOM, and then StAX Stream and StAX event. For each of the parse tests it:
  1. pre-loads hamlet.xml in to a char[] array, and then in to a CharArrayReader so there should be no effect of real IO on the time.
  2. Runs the CharArrayReader through the parser and builds a JDOM Document.
  3. Runs the data through the parser again, but this time in to a 'bit-bucket' system (not JDOM).
  4. Substracts the two to get an idea of how much time is spent in the parser, and how much in JDOM.
The following metrics are (currently) produced:

JDOM 2 Results


JDOM 2.0.6 (Release) run with Java7u75

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.97MiB3.88ms1.61ms5.47ms2.08ms3.65ms1.07ms6.62ms2.43ms1.18ms12.36ms4.80ms27.82ms6.19ms5.94ms
273.14KiB1.97MiB3.84ms1.47ms5.35ms1.88ms3.33ms0.49ms7.28ms2.45ms1.31ms10.39ms4.92ms28.97ms6.40ms5.93ms
273.14KiB1.97MiB3.67ms1.28ms5.46ms1.96ms3.76ms0.88ms7.07ms2.86ms1.22ms10.12ms4.81ms28.17ms6.85ms6.52ms
273.14KiB1.97MiB3.57ms0.90ms5.41ms2.07ms3.28ms0.74ms6.60ms2.38ms1.24ms10.28ms5.04ms28.65ms6.20ms5.75ms
273.14KiB1.97MiB3.59ms1.38ms5.74ms2.31ms3.50ms0.97ms7.02ms2.73ms1.26ms10.19ms4.98ms29.98ms6.28ms5.95ms

JDOM PRE-2.0.6 run with Java8u31

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.97MiB3.94ms1.77ms5.13ms1.88ms3.30ms0.91ms6.13ms1.88ms1.24ms9.48ms4.99ms28.46ms6.08ms5.48ms
273.14KiB1.97MiB3.64ms1.48ms5.08ms1.71ms3.28ms0.93ms6.09ms2.07ms1.28ms9.51ms4.84ms27.92ms6.15ms5.57ms
273.14KiB1.97MiB3.93ms1.37ms5.30ms2.01ms3.32ms0.87ms6.00ms2.13ms1.17ms9.43ms4.90ms27.90ms6.18ms6.77ms
273.14KiB1.97MiB3.39ms1.17ms5.32ms2.09ms3.27ms0.73ms6.14ms2.28ms1.21ms10.39ms4.84ms30.51ms8.27ms5.54ms
273.14KiB1.97MiB3.25ms1.09ms5.17ms2.05ms3.31ms1.02ms6.06ms2.18ms1.21ms9.19ms4.74ms29.06ms6.07ms5.41ms

JDOM PRE-2.0.6 run with Java7u21

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.97MiB3.64ms1.29ms6.52ms2.95ms3.63ms1.16ms7.07ms2.70ms1.22ms12.76ms4.83ms29.25ms6.65ms5.76ms
273.14KiB1.97MiB4.33ms1.99ms5.78ms2.26ms3.48ms0.80ms6.87ms2.52ms1.64ms10.01ms4.84ms28.53ms6.28ms5.79ms
273.14KiB1.97MiB3.72ms1.40ms5.69ms2.24ms3.41ms0.97ms6.81ms2.43ms1.35ms10.30ms4.76ms29.08ms6.39ms5.78ms
273.14KiB1.97MiB3.57ms1.29ms5.64ms2.18ms3.39ms0.96ms6.96ms2.58ms1.52ms10.28ms4.74ms29.05ms6.34ms5.78ms
273.14KiB1.97MiB3.58ms1.27ms5.57ms2.12ms3.51ms1.14ms6.76ms2.20ms1.65ms10.14ms4.84ms28.46ms6.29ms5.73ms

RE BASELINE

JDOM 2.0.5 run with Java7u21 on a new laptop - much faster.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.97MiB4.11ms1.24ms5.77ms0.82ms3.44ms0.58ms8.12ms1.69ms1.43ms13.28ms6.29ms33.67ms6.82ms7.44ms
273.14KiB1.97MiB3.92ms0.77ms6.18ms2.03ms3.94ms0.25ms8.12ms2.86ms1.45ms12.29ms5.01ms29.84ms8.91ms6.61ms
273.14KiB1.97MiB4.58ms1.63ms6.58ms2.22ms4.63ms1.75ms7.05ms2.14ms1.45ms12.44ms5.55ms32.19ms6.91ms6.88ms
273.14KiB1.97MiB3.87ms0.28ms5.82ms2.24ms3.51ms0.75ms7.68ms2.77ms1.88ms11.68ms5.67ms31.18ms6.43ms5.78ms
273.14KiB1.97MiB5.48ms3.06ms6.24ms2.57ms4.33ms1.84ms7.32ms0.67ms1.51ms11.10ms4.92ms33.44ms8.05ms8.30ms

Preparing for JDOM 2.0.6


JDOM 2.0.5 - run with Java7u7

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.97MiB5.22ms1.43ms9.90ms3.82ms6.01ms2.26ms9.73ms2.86ms1.54ms14.42ms7.36ms36.02ms9.26ms7.81ms
273.14KiB1.97MiB6.65ms3.11ms8.18ms2.61ms5.60ms1.62ms10.18ms3.76ms1.75ms15.07ms7.20ms34.17ms11.07ms7.84ms
273.14KiB1.97MiB5.30ms1.37ms7.21ms2.04ms6.09ms2.12ms8.75ms1.94ms1.88ms14.03ms7.32ms37.78ms9.06ms7.60ms
273.14KiB1.97MiB5.27ms2.09ms7.00ms2.06ms5.61ms1.91ms9.18ms2.64ms1.94ms17.15ms8.14ms34.80ms8.79ms7.72ms
273.14KiB1.97MiB4.72ms1.36ms7.41ms2.34ms5.24ms0.94ms12.10ms5.35ms1.82ms14.31ms6.24ms37.43ms9.30ms7.99ms

JDOM 2.0.4 - Run with Java7u7

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.97MiB5.48ms1.49ms8.19ms1.82ms5.74ms1.90ms11.35ms3.77ms1.89ms13.87ms7.25ms35.58ms9.53ms7.64ms
273.14KiB1.97MiB5.49ms1.59ms8.62ms2.43ms4.97ms1.06ms9.74ms2.72ms1.91ms14.02ms7.41ms35.27ms9.90ms7.71ms
273.14KiB1.97MiB6.15ms2.58ms8.01ms2.76ms5.53ms1.37ms10.36ms3.02ms1.90ms13.91ms6.31ms35.26ms9.08ms7.60ms
273.14KiB1.97MiB5.09ms1.54ms7.64ms2.45ms5.85ms2.07ms11.64ms5.00ms1.66ms13.55ms6.57ms34.20ms9.29ms7.75ms
273.14KiB1.97MiB5.82ms2.18ms7.87ms2.87ms5.84ms2.03ms10.10ms3.16ms1.81ms14.39ms6.65ms35.84ms9.01ms7.67ms

JDOM 2.0.3 - Identical code to previous test, but run with Java7u7 instead of Java7u0 (Code is compiled with Java6, but run with different Java7 JREs)
Note that Update7 seems slightly slower on everything, but uses less memory for Java objects.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.97MiB5.52ms1.42ms7.99ms1.79ms5.76ms1.22ms9.24ms2.34ms1.75ms14.25ms7.51ms35.22ms8.37ms7.27ms
273.14KiB1.97MiB6.04ms1.93ms8.51ms2.64ms5.36ms1.59ms9.52ms2.91ms1.91ms13.10ms7.96ms36.89ms9.16ms7.64ms
273.14KiB1.97MiB5.13ms1.07ms7.64ms1.66ms5.49ms1.53ms9.87ms3.18ms1.91ms13.58ms7.07ms35.82ms9.36ms7.92ms
273.14KiB1.97MiB5.19ms1.43ms7.57ms1.88ms5.81ms1.30ms11.69ms4.43ms1.71ms15.15ms6.69ms36.27ms8.62ms8.23ms
273.14KiB1.97MiB5.58ms1.70ms7.71ms2.62ms5.42ms0.98ms9.44ms2.90ms1.89ms14.58ms6.89ms36.33ms8.82ms7.85ms

JDOM 2.0.3 - ContentList and Verifier performance fixes (not particularly visible in these benchmarks which are too broad).

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB5.07ms1.47ms7.82ms1.95ms5.53ms1.89ms9.01ms2.99ms1.76ms13.22ms6.96ms34.19ms8.62ms7.45ms
273.14KiB2.07MiB5.51ms1.40ms8.65ms2.92ms5.13ms1.11ms9.13ms3.24ms1.71ms13.13ms6.55ms34.13ms8.88ms7.68ms
273.14KiB2.07MiB5.10ms1.34ms7.59ms2.61ms4.93ms1.42ms8.70ms2.84ms1.67ms13.36ms6.82ms32.30ms8.53ms7.60ms
273.14KiB2.07MiB4.93ms1.82ms7.54ms2.44ms5.01ms1.60ms9.14ms3.48ms1.66ms13.36ms6.42ms34.56ms8.20ms7.34ms
273.14KiB2.07MiB5.30ms1.98ms7.83ms3.01ms5.18ms1.77ms8.59ms2.67ms1.76ms12.97ms6.88ms34.89ms8.43ms7.67ms

Pre JDOM 2.0.3 - Various fixes but mostly the BitMasked Verifier - incorporating Canadian Wilf's performance suggestions.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.51ms2.51ms8.19ms3.30ms5.28ms1.60ms8.71ms2.97ms1.75ms12.55ms7.40ms32.00ms8.38ms7.23ms
273.14KiB2.06MiB4.95ms1.46ms7.34ms2.25ms5.48ms2.16ms8.30ms2.12ms1.64ms13.59ms6.42ms34.06ms7.94ms7.73ms
273.14KiB2.06MiB4.72ms0.98ms7.28ms2.01ms4.67ms1.45ms9.04ms3.39ms1.76ms13.78ms6.89ms33.85ms8.84ms7.56ms
273.14KiB2.06MiB5.06ms1.91ms7.96ms3.29ms4.69ms1.48ms8.79ms3.00ms1.69ms14.80ms6.97ms31.52ms8.89ms7.48ms
273.14KiB2.06MiB5.39ms2.44ms7.94ms3.37ms5.38ms1.24ms8.49ms2.33ms1.77ms12.96ms6.48ms33.30ms8.90ms7.38ms

New NodeComparator in Jaxen

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.11ms1.64ms7.03ms1.63ms4.65ms1.20ms8.94ms2.11ms1.75ms12.81ms7.21ms27.42ms8.59ms7.37ms
273.14KiB2.06MiB5.20ms1.37ms7.29ms2.13ms4.95ms1.22ms8.69ms1.75ms1.71ms12.90ms7.43ms27.84ms9.33ms7.93ms
273.14KiB2.06MiB5.61ms2.46ms7.39ms2.51ms4.49ms1.18ms8.84ms2.35ms1.66ms13.25ms7.61ms29.50ms9.66ms7.34ms
273.14KiB2.06MiB5.72ms2.48ms7.93ms3.18ms4.57ms1.14ms10.17ms3.28ms1.75ms13.45ms7.17ms29.37ms9.16ms7.78ms
273.14KiB2.06MiB4.83ms1.75ms7.57ms2.58ms4.56ms1.11ms9.10ms2.38ms1.74ms13.52ms7.54ms28.39ms9.78ms7.79ms

JDOM 2.0.1 - Fix for issue #72 means that the 'Dump' job is doing more work, and is thus slower than before.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB4.97ms1.89ms7.08ms2.09ms4.74ms1.24ms8.22ms2.65ms1.68ms13.02ms7.07ms31.24ms8.55ms7.19ms
273.14KiB2.06MiB4.74ms1.35ms7.47ms2.66ms4.62ms1.30ms8.21ms2.61ms1.69ms13.12ms6.84ms31.10ms8.56ms7.23ms
273.14KiB2.06MiB5.11ms2.12ms7.01ms2.56ms4.56ms1.39ms8.03ms2.45ms1.80ms13.00ms6.89ms31.96ms8.57ms7.23ms
273.14KiB2.06MiB4.82ms1.85ms6.99ms2.52ms4.58ms1.45ms8.34ms2.89ms1.66ms13.00ms6.92ms32.36ms8.59ms7.11ms
273.14KiB2.06MiB4.67ms1.69ms7.49ms2.97ms4.91ms1.71ms8.09ms2.61ms1.65ms13.00ms6.86ms32.72ms8.82ms7.24ms

JDOM 2.0.0

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB5.07ms1.91ms7.67ms1.50ms5.33ms1.32ms9.79ms3.60ms1.74ms7.87ms7.16ms32.23ms9.90ms7.74ms
273.14KiB2.06MiB5.08ms1.11ms9.21ms3.80ms5.15ms1.51ms9.46ms2.82ms1.78ms8.13ms7.06ms32.37ms9.03ms7.40ms
273.14KiB2.06MiB5.04ms1.16ms7.64ms2.76ms4.93ms1.39ms9.72ms3.34ms1.72ms8.87ms6.92ms33.26ms8.92ms7.42ms
273.14KiB2.06MiB5.03ms1.70ms7.71ms2.82ms5.25ms1.94ms9.78ms3.74ms1.75ms8.38ms7.13ms31.54ms9.09ms8.43ms
273.14KiB2.06MiB4.97ms1.66ms7.88ms2.90ms5.07ms1.49ms8.90ms2.63ms1.80ms8.81ms7.86ms31.77ms9.35ms7.52ms

April 1 - BETA 6 - Nothing significant changed for performance

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB6.78ms2.76ms8.35ms2.78ms5.04ms1.37ms9.02ms3.15ms1.80ms8.72ms7.81ms33.40ms8.96ms7.57ms
273.14KiB2.06MiB5.35ms1.50ms8.02ms2.92ms5.00ms1.67ms8.87ms2.93ms1.78ms7.74ms7.50ms31.98ms9.49ms7.98ms
273.14KiB2.06MiB5.01ms1.59ms7.48ms2.58ms4.76ms1.47ms8.92ms2.73ms1.78ms7.87ms7.40ms34.28ms9.37ms7.98ms
273.14KiB2.06MiB5.19ms1.73ms7.34ms2.52ms4.89ms1.61ms8.98ms2.89ms1.73ms8.21ms7.85ms32.56ms9.94ms7.84ms
273.14KiB2.06MiB4.95ms1.65ms7.45ms2.30ms4.95ms1.56ms8.85ms2.99ms1.80ms8.31ms7.71ms33.68ms9.02ms7.63ms

March 26 - BETA 5 - Number of optimizations

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB5.02ms1.82ms8.72ms3.00ms5.27ms1.95ms8.29ms2.72ms1.66ms7.54ms6.89ms33.01ms9.02ms7.20ms
273.14KiB2.06MiB4.99ms1.19ms7.48ms2.66ms4.89ms1.60ms8.25ms2.59ms1.71ms7.44ms6.95ms31.89ms8.53ms7.19ms
273.14KiB2.06MiB4.76ms1.35ms7.04ms2.62ms4.85ms1.65ms8.96ms3.49ms1.71ms7.75ms7.06ms31.94ms8.75ms7.36ms
273.14KiB2.06MiB4.78ms1.78ms7.15ms2.56ms4.81ms1.60ms8.33ms2.84ms1.65ms7.43ms6.90ms32.38ms8.55ms7.26ms
273.14KiB2.06MiB4.69ms1.72ms7.21ms2.68ms4.97ms1.73ms8.24ms2.76ms1.65ms7.56ms6.94ms31.49ms8.53ms7.63ms

Optimized DescendantIterator

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB5.24ms2.15ms7.73ms1.88ms5.18ms1.54ms8.62ms2.78ms2.07ms10.79ms8.87ms32.62ms8.94ms7.70ms
273.14KiB2.06MiB5.26ms1.52ms8.01ms2.72ms4.81ms1.25ms8.55ms2.76ms1.69ms8.69ms7.19ms31.75ms9.15ms8.40ms
273.14KiB2.06MiB5.16ms1.51ms7.50ms2.75ms4.88ms1.40ms9.01ms3.38ms1.71ms8.24ms7.19ms32.89ms9.96ms7.80ms
273.14KiB2.06MiB4.98ms1.76ms7.49ms2.68ms4.60ms1.06ms8.75ms2.62ms1.73ms8.18ms7.45ms32.54ms9.80ms8.00ms
273.14KiB2.06MiB5.35ms2.31ms7.85ms3.04ms4.98ms1.65ms8.68ms2.92ms1.68ms8.23ms7.74ms31.02ms9.63ms7.75ms

Optimized Indent calculation on FormatStack, and Text/CDATA improvements in the AbstractFormattedWalker.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB6.40ms3.18ms7.45ms1.96ms5.16ms1.66ms8.75ms3.19ms3.11ms8.02ms7.34ms31.13ms9.11ms7.42ms
273.14KiB2.06MiB4.97ms1.47ms7.63ms2.83ms5.49ms1.73ms8.61ms2.79ms3.13ms7.84ms7.35ms29.99ms9.26ms7.36ms
273.14KiB2.06MiB4.79ms1.23ms7.50ms2.87ms4.93ms1.78ms8.56ms2.75ms3.12ms7.84ms7.62ms30.98ms9.37ms7.39ms
273.14KiB2.06MiB5.19ms2.11ms7.16ms2.66ms4.79ms1.45ms8.97ms3.34ms3.01ms8.25ms7.37ms30.68ms9.11ms7.55ms
273.14KiB2.06MiB4.80ms1.68ms7.41ms2.73ms4.93ms1.47ms9.65ms3.70ms3.04ms8.15ms7.43ms29.68ms9.62ms7.61ms

Format sub classes.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB6.57ms3.14ms7.62ms2.04ms5.48ms1.78ms9.84ms3.24ms3.07ms9.99ms7.50ms30.77ms9.19ms7.72ms
273.14KiB2.06MiB5.46ms1.58ms8.55ms3.35ms5.30ms1.81ms9.39ms2.98ms3.15ms10.21ms8.32ms31.29ms9.53ms8.22ms
273.14KiB2.06MiB5.24ms1.68ms7.60ms2.50ms5.63ms2.18ms8.90ms2.63ms3.03ms9.49ms8.39ms30.87ms9.73ms8.11ms
273.14KiB2.06MiB4.94ms1.59ms7.58ms2.96ms5.02ms1.32ms9.03ms2.65ms3.39ms9.51ms7.79ms29.11ms9.54ms7.49ms
273.14KiB2.06MiB4.79ms1.61ms7.38ms2.66ms4.88ms1.68ms9.30ms3.20ms3.21ms9.73ms7.60ms29.13ms9.65ms7.90ms

FastText in Walker

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB5.60ms2.05ms7.18ms1.60ms5.19ms1.70ms8.38ms2.32ms3.13ms9.88ms7.24ms29.08ms9.53ms7.76ms
273.14KiB2.06MiB5.61ms1.79ms7.94ms2.70ms4.79ms1.04ms8.84ms3.14ms3.14ms9.59ms7.75ms29.48ms10.08ms7.32ms
273.14KiB2.06MiB5.32ms1.42ms7.11ms2.18ms5.34ms1.85ms8.50ms2.46ms3.12ms9.31ms7.58ms29.13ms9.55ms7.70ms
273.14KiB2.06MiB5.69ms2.17ms8.26ms3.09ms5.04ms1.81ms8.74ms2.46ms3.14ms10.32ms7.11ms30.05ms9.29ms7.51ms
273.14KiB2.06MiB5.28ms1.73ms7.51ms2.44ms5.12ms1.20ms8.24ms2.54ms3.27ms9.32ms7.82ms28.84ms9.27ms7.91ms

Faster DescendantIterator

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB5.25ms2.00ms7.46ms2.05ms5.10ms1.58ms8.74ms2.66ms3.19ms10.53ms7.24ms29.51ms9.51ms7.59ms
273.14KiB2.06MiB5.12ms1.58ms8.70ms3.52ms5.34ms1.55ms8.92ms3.25ms3.24ms11.55ms7.47ms31.85ms9.77ms7.42ms
273.14KiB2.06MiB5.28ms1.89ms7.15ms2.01ms5.06ms1.69ms8.74ms3.23ms3.09ms10.56ms7.75ms30.07ms9.02ms7.73ms
273.14KiB2.06MiB4.63ms1.56ms7.41ms2.48ms4.93ms1.55ms9.58ms4.09ms3.09ms10.57ms7.37ms28.81ms9.41ms7.72ms
273.14KiB2.06MiB4.98ms1.87ms7.89ms3.37ms4.87ms1.46ms8.33ms2.51ms3.11ms10.84ms6.85ms31.15ms9.05ms7.53ms

Faster Formatter

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.07MiB5.53ms2.26ms7.27ms1.87ms4.54ms0.97ms9.04ms3.04ms3.36ms11.22ms7.81ms29.10ms9.32ms7.93ms
273.14KiB2.06MiB5.20ms1.74ms8.27ms2.72ms5.01ms1.34ms9.45ms3.48ms3.41ms11.63ms7.68ms30.51ms9.08ms8.08ms
273.14KiB2.06MiB5.04ms1.29ms7.58ms2.62ms4.87ms1.28ms8.64ms2.77ms3.35ms11.14ms7.52ms30.27ms9.40ms8.13ms
273.14KiB2.06MiB5.02ms1.63ms7.62ms2.84ms4.87ms1.47ms8.58ms2.73ms3.38ms10.52ms7.52ms31.11ms9.57ms7.81ms
273.14KiB2.06MiB5.02ms1.90ms7.86ms2.89ms4.87ms1.48ms9.39ms3.67ms3.20ms10.81ms7.60ms29.37ms9.26ms8.33ms

March 16 - BETA 4 - Reorganized StAX, Iterator/Iterable getDescendants(), minor changes.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.24ms1.88ms8.09ms2.82ms5.38ms1.61ms9.48ms3.17ms3.31ms15.00ms9.44ms29.68ms11.96ms9.57ms
273.14KiB2.06MiB5.17ms1.35ms7.95ms1.73ms5.53ms1.77ms9.73ms3.70ms3.62ms14.95ms9.92ms29.98ms10.87ms9.83ms
273.14KiB2.06MiB5.08ms1.86ms8.10ms3.46ms5.04ms1.24ms8.62ms3.06ms3.55ms14.70ms9.44ms29.51ms12.68ms9.72ms
273.14KiB2.06MiB4.85ms1.34ms7.46ms2.47ms5.02ms1.18ms8.87ms2.17ms3.47ms15.65ms10.00ms29.41ms11.09ms9.62ms
273.14KiB2.06MiB4.83ms1.24ms8.04ms3.01ms4.71ms1.20ms8.42ms2.28ms3.51ms14.86ms9.73ms29.54ms11.48ms10.27ms

March 12 - BETA 3 - Attribute Specified, TextHelper and Attribute Sorter moved to core from Contrib.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB4.93ms1.63ms7.30ms2.17ms4.95ms1.50ms9.01ms3.11ms3.11ms14.43ms9.40ms30.71ms10.76ms9.47ms
273.14KiB2.06MiB5.08ms1.46ms7.23ms2.35ms5.19ms1.47ms8.68ms2.93ms3.26ms14.70ms9.94ms30.57ms11.65ms10.01ms
273.14KiB2.06MiB5.00ms1.73ms7.87ms3.11ms4.95ms1.70ms8.89ms2.75ms3.49ms14.28ms9.36ms29.50ms11.38ms9.78ms
273.14KiB2.06MiB5.03ms1.74ms7.66ms3.09ms5.85ms2.53ms9.17ms3.45ms3.18ms15.65ms9.09ms31.47ms11.08ms9.28ms
273.14KiB2.06MiB4.81ms1.56ms7.53ms2.83ms4.76ms1.54ms8.38ms2.19ms3.30ms14.38ms9.13ms29.96ms10.95ms9.31ms

Leap-Day BETA 2 release - includes location-tracking in the SAXHandler

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.27ms1.75ms8.01ms2.18ms5.11ms1.34ms9.98ms3.16ms3.22ms14.04ms9.66ms29.39ms11.11ms10.42ms
273.14KiB2.06MiB4.95ms1.08ms7.75ms1.89ms4.93ms1.01ms9.38ms2.45ms3.45ms14.20ms9.20ms29.21ms11.77ms10.24ms
273.14KiB2.06MiB4.96ms1.25ms7.31ms2.69ms4.98ms1.37ms9.40ms3.24ms3.45ms14.20ms9.18ms29.18ms11.48ms9.82ms
273.14KiB2.06MiB4.92ms1.74ms6.91ms1.78ms4.80ms1.32ms9.81ms2.70ms3.58ms14.77ms9.27ms29.01ms11.53ms9.78ms
273.14KiB2.06MiB5.36ms1.99ms7.58ms2.53ms4.61ms0.84ms9.55ms3.47ms3.46ms15.13ms9.55ms30.98ms11.10ms10.31ms

Fixes for XMLText escaping

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.01ms1.83ms7.06ms1.96ms5.19ms1.60ms9.09ms3.53ms3.23ms14.32ms9.16ms31.49ms10.84ms10.10ms
273.14KiB2.06MiB4.86ms1.16ms7.23ms1.68ms5.02ms1.39ms9.41ms3.57ms3.50ms15.21ms9.49ms29.77ms11.03ms9.68ms
273.14KiB2.06MiB4.73ms1.01ms7.41ms2.42ms4.90ms1.52ms8.63ms3.06ms3.11ms15.76ms9.32ms30.31ms10.74ms9.50ms
273.14KiB2.06MiB4.64ms1.42ms7.44ms2.66ms5.35ms1.64ms9.20ms3.62ms3.06ms14.34ms9.71ms29.80ms11.11ms10.36ms
273.14KiB2.06MiB4.69ms1.68ms7.02ms2.40ms5.10ms1.74ms9.20ms3.55ms3.15ms13.84ms9.96ms29.41ms11.74ms9.95ms

SAX String-intern and Lazy Attributes

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB6.01ms2.83ms7.29ms2.34ms5.24ms1.90ms8.55ms2.77ms3.14ms13.08ms9.78ms30.18ms11.28ms9.89ms
273.14KiB2.06MiB6.10ms2.36ms7.31ms2.17ms5.10ms0.82ms9.99ms4.00ms3.15ms12.75ms9.78ms30.13ms11.41ms9.94ms
273.14KiB2.06MiB6.36ms3.22ms7.55ms3.00ms5.03ms1.71ms8.52ms2.94ms3.15ms14.12ms9.67ms31.15ms12.02ms10.84ms
273.14KiB2.06MiB5.95ms2.82ms7.22ms2.58ms4.96ms1.23ms9.49ms3.90ms3.45ms13.33ms9.77ms29.96ms11.70ms9.97ms
273.14KiB2.06MiB5.97ms2.69ms7.37ms2.79ms4.61ms1.43ms8.71ms3.08ms3.24ms12.59ms9.74ms29.80ms11.34ms9.81ms

Lazy AttributeList and smart AdditionalNamespace checking too.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB4.58ms1.62ms6.91ms2.11ms4.59ms1.26ms8.30ms2.79ms3.11ms12.61ms9.36ms29.12ms11.08ms9.67ms
273.14KiB2.06MiB4.67ms1.30ms7.26ms2.69ms4.34ms0.77ms8.35ms2.71ms3.11ms12.28ms10.51ms29.17ms11.32ms9.93ms
273.14KiB2.06MiB4.42ms1.06ms7.19ms2.75ms4.50ms1.08ms8.95ms3.08ms3.11ms12.01ms9.44ms29.36ms11.50ms9.76ms
273.14KiB2.06MiB4.67ms1.68ms6.84ms2.45ms4.44ms1.07ms8.47ms2.96ms3.17ms12.25ms9.47ms29.57ms11.48ms9.71ms
273.14KiB2.06MiB4.50ms1.49ms6.91ms2.51ms4.40ms1.12ms8.28ms2.80ms3.06ms12.13ms10.01ms29.23ms11.50ms9.68ms

Both SlimJDOMFactory and Lazy AttributeList

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.57MiB8.02ms5.03ms7.26ms2.10ms4.84ms1.59ms8.25ms2.74ms2.97ms12.03ms9.31ms28.70ms11.20ms9.93ms
273.14KiB1.57MiB8.28ms5.02ms7.06ms2.28ms4.55ms1.11ms8.25ms2.70ms2.90ms11.93ms9.77ms28.73ms11.32ms9.96ms
273.14KiB1.57MiB7.90ms4.61ms6.89ms2.35ms4.57ms1.25ms8.31ms2.78ms2.94ms12.46ms9.55ms29.30ms11.69ms9.80ms
273.14KiB1.57MiB7.96ms5.05ms6.94ms2.44ms4.57ms1.13ms9.49ms3.80ms3.00ms12.19ms9.37ms30.65ms11.22ms9.69ms
273.14KiB1.57MiB7.74ms4.84ms7.26ms2.55ms4.72ms1.54ms8.28ms2.04ms3.02ms11.97ms9.60ms28.81ms11.38ms9.79ms

Lazy AttributeList

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB4.56ms1.58ms6.86ms2.05ms5.14ms1.59ms9.08ms3.14ms3.11ms12.85ms9.79ms30.04ms13.41ms9.78ms
273.14KiB2.06MiB4.58ms0.78ms7.40ms2.00ms4.74ms1.41ms8.27ms2.74ms3.10ms12.57ms9.69ms30.01ms11.52ms9.94ms
273.14KiB2.06MiB4.50ms1.17ms6.96ms2.52ms5.07ms1.86ms9.25ms3.74ms3.11ms12.58ms10.08ms30.14ms11.29ms9.87ms
273.14KiB2.06MiB4.49ms1.30ms6.73ms2.33ms4.86ms1.17ms8.35ms2.82ms3.49ms12.41ms9.71ms30.05ms11.52ms9.83ms
273.14KiB2.06MiB4.60ms1.66ms6.90ms2.32ms4.70ms1.45ms8.25ms2.71ms3.10ms12.49ms9.54ms30.87ms12.33ms11.12ms

SlimJDOMFactory

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.77MiB8.49ms5.26ms7.04ms2.20ms5.05ms1.72ms8.30ms2.59ms2.96ms12.36ms9.84ms29.84ms11.73ms10.17ms
273.14KiB1.77MiB8.41ms5.02ms6.94ms2.06ms4.81ms1.09ms8.38ms2.69ms3.15ms12.40ms9.86ms29.80ms11.68ms10.23ms
273.14KiB1.77MiB8.66ms5.56ms6.96ms2.42ms4.53ms1.12ms8.14ms1.90ms2.95ms12.48ms10.05ms29.79ms11.74ms10.40ms
273.14KiB1.77MiB8.33ms4.89ms7.11ms2.63ms5.25ms1.51ms8.12ms2.58ms2.97ms12.80ms9.88ms29.62ms11.73ms10.22ms
273.14KiB1.77MiB9.01ms6.04ms7.34ms2.79ms4.57ms1.32ms8.07ms2.51ms3.08ms12.35ms9.90ms30.58ms11.95ms10.19ms

Change New XPath API.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.27MiB4.82ms1.76ms7.30ms2.40ms5.93ms2.38ms8.72ms2.54ms3.35ms12.95ms10.91ms31.29ms12.69ms10.51ms
273.14KiB2.27MiB4.70ms1.45ms7.69ms2.32ms5.00ms1.16ms9.30ms3.21ms3.11ms13.07ms10.44ms30.68ms12.30ms10.16ms
273.14KiB2.27MiB4.62ms1.14ms7.18ms2.76ms4.86ms1.43ms8.26ms2.75ms3.53ms13.01ms11.09ms28.99ms12.42ms10.16ms
273.14KiB2.27MiB4.47ms1.24ms7.03ms2.47ms4.57ms0.83ms8.47ms2.92ms3.25ms14.39ms10.04ms29.25ms11.82ms10.32ms
273.14KiB2.27MiB5.19ms2.02ms7.48ms2.84ms4.59ms1.32ms8.67ms3.21ms3.21ms12.79ms11.01ms29.29ms11.97ms10.09ms

Formatting on all Outputters, and all outputters use new Walker concept for text formatting.

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.27MiB4.68ms1.62ms7.37ms2.21ms4.79ms1.46ms9.13ms3.60ms3.22ms13.46ms10.11ms30.61ms12.03ms10.95ms
273.14KiB2.27MiB4.87ms1.29ms7.10ms2.32ms4.43ms0.77ms8.31ms2.77ms3.38ms13.02ms10.38ms30.66ms12.65ms10.71ms
273.14KiB2.27MiB4.65ms1.22ms7.18ms2.49ms4.36ms0.96ms8.19ms2.73ms3.62ms13.73ms10.97ms30.83ms11.85ms10.55ms
273.14KiB2.27MiB4.84ms1.77ms7.15ms2.63ms4.52ms1.20ms8.95ms3.23ms3.33ms13.46ms10.97ms30.20ms12.93ms10.73ms
273.14KiB2.27MiB5.04ms2.03ms7.72ms3.27ms4.25ms0.88ms9.21ms3.65ms3.30ms13.82ms10.50ms30.19ms12.13ms10.82ms

Updated SAXOutputter and DOMOutputter

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.27MiB5.06ms1.39ms7.58ms2.21ms4.82ms1.25ms8.91ms2.96ms3.21ms12.75ms9.85ms30.64ms11.24ms10.30ms
273.14KiB2.27MiB4.82ms0.85ms7.34ms1.85ms5.04ms1.11ms9.12ms3.19ms4.46ms15.42ms10.18ms30.52ms12.35ms10.49ms
273.14KiB2.27MiB4.86ms1.51ms7.57ms2.78ms5.07ms1.58ms8.63ms2.85ms3.27ms12.30ms9.86ms29.85ms12.00ms11.11ms
273.14KiB2.27MiB4.59ms1.37ms7.16ms2.36ms4.83ms1.49ms8.71ms2.85ms3.29ms12.56ms9.87ms31.85ms11.47ms9.91ms
273.14KiB2.27MiB4.66ms1.59ms7.76ms2.99ms4.71ms1.34ms8.94ms3.00ms3.44ms12.66ms10.29ms29.70ms11.94ms10.32ms

New SAXBuilder

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.27MiB4.82ms1.84ms8.11ms3.22ms5.89ms1.42ms9.09ms1.59ms3.18ms12.65ms9.79ms29.62ms11.04ms9.61ms
273.14KiB2.27MiB4.78ms1.29ms7.23ms2.62ms5.50ms1.27ms9.14ms2.62ms3.13ms12.46ms10.24ms29.94ms11.29ms9.68ms
273.14KiB2.27MiB4.66ms1.44ms7.64ms3.15ms5.43ms1.26ms9.53ms2.93ms3.09ms12.59ms10.36ms30.00ms11.70ms9.52ms
273.14KiB2.27MiB4.67ms1.60ms7.15ms2.71ms5.46ms1.41ms8.97ms2.48ms3.10ms12.52ms9.65ms29.65ms11.87ms10.12ms
273.14KiB2.27MiB4.94ms1.98ms7.17ms2.72ms5.40ms1.49ms8.96ms2.20ms3.09ms12.67ms10.72ms29.55ms11.86ms9.50ms

DefaultJDOMFactory in SAX/SAXJ

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.27MiB6.65ms3.35ms8.36ms3.44ms5.73ms2.06ms9.30ms2.84ms3.17ms12.33ms10.30ms28.97ms13.47ms10.11ms
273.14KiB2.27MiB6.66ms2.56ms7.34ms2.00ms4.99ms1.71ms9.02ms3.45ms3.09ms12.71ms9.88ms29.98ms12.91ms9.93ms
273.14KiB2.27MiB7.65ms4.11ms7.64ms3.01ms4.72ms1.46ms9.07ms3.44ms3.21ms12.21ms10.51ms29.87ms12.77ms9.75ms
273.14KiB2.26MiB6.52ms3.04ms7.09ms2.12ms4.59ms1.17ms8.96ms2.81ms3.25ms12.89ms9.81ms29.58ms12.50ms9.54ms
273.14KiB2.27MiB6.85ms3.27ms7.38ms2.84ms4.94ms1.41ms9.67ms3.97ms3.33ms12.62ms10.12ms30.47ms12.11ms9.56ms

final DefaultJDOMHandler

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.27MiB5.30ms1.76ms6.87ms2.24ms4.73ms1.21ms9.11ms2.84ms3.22ms12.54ms10.43ms30.16ms11.83ms9.89ms
273.14KiB2.27MiB5.25ms1.08ms7.00ms2.06ms4.61ms0.96ms8.81ms2.55ms3.28ms12.07ms10.59ms29.97ms12.40ms10.36ms
273.14KiB2.27MiB5.60ms1.39ms7.33ms2.58ms4.66ms1.35ms8.76ms3.06ms3.30ms12.59ms10.75ms29.97ms12.30ms10.67ms
273.14KiB2.26MiB5.10ms1.63ms7.18ms2.43ms4.46ms0.95ms8.45ms2.29ms3.31ms13.10ms10.25ms29.60ms12.44ms10.81ms
273.14KiB2.27MiB5.03ms1.35ms7.33ms2.75ms4.45ms0.99ms8.69ms2.58ms3.29ms13.38ms10.29ms29.70ms12.47ms10.56ms


Second major performance cycle

  1. Fix issue in the actual performance tool what included GC time in the 'Parse' time
  2. Introduce StAX code, and test StAX, SAX, and DOM performance (as well as JDOM time of each)

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.27MiB5.48ms1.77ms8.08ms2.61ms5.79ms2.01ms9.50ms3.26ms3.55ms13.20ms10.21ms32.19ms12.70ms10.37ms
273.14KiB2.27MiB5.19ms0.83ms7.67ms2.32ms5.73ms1.82ms9.23ms3.00ms3.09ms12.33ms9.88ms30.70ms13.49ms10.62ms
273.14KiB2.27MiB5.68ms1.75ms9.22ms4.25ms4.81ms1.30ms9.43ms2.85ms3.58ms12.07ms10.22ms31.11ms12.38ms10.42ms
273.14KiB2.26MiB5.08ms1.35ms7.39ms2.56ms5.15ms1.40ms9.01ms2.65ms3.23ms13.14ms10.86ms31.55ms11.66ms10.08ms
273.14KiB2.27MiB5.90ms2.10ms7.80ms3.11ms5.38ms2.11ms9.02ms2.59ms3.26ms12.69ms10.35ms30.54ms11.52ms10.63ms


First major performance cycle

  1. After changing ContentList.iterator()
  2. After changing AttributeList.iterator()
  3. After setting AttributeList and ContentList to RandomAccess
  4. Add NamespaceStack to XMLOutputter and SAXOutputter... see 16e00081b... for all the performance fix details. It looks like the fix for Multi-sequential-Text issues is still slowig things down slightly.
  5. Completely rework the XMLOutputter d50d6421... for all the details.
These results actually come from a slightly cleaned-up version: 1e44f724...
InputJDOMParseScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB207.55ms3.29ms13.04ms9.82ms75.92ms10.57ms9.33ms
273.14KiB2.26MiB207.72ms3.38ms12.47ms9.34ms74.77ms10.93ms8.42ms
273.14KiB2.26MiB208.30ms3.38ms12.40ms9.43ms75.60ms10.37ms9.32ms
273.14KiB2.26MiB207.72ms3.41ms12.40ms9.82ms73.54ms11.03ms9.47ms
273.14KiB2.26MiB207.10ms3.07ms14.23ms9.39ms74.92ms10.30ms8.85ms


After changes to ContentList e270fd04a3 to make the FilterList and FilterListIterator work correctly on get/set and other issues. The major change here that has affected the performance is the final methods and parameter values for the checkIndex and checkPreConditions, I think. In reality, ContentList is doing additional work because of the new dataModCount variable.

InputJDOMParseScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB209.10ms4.67ms58.91ms24.49ms279.07ms42.89ms39.76ms
273.14KiB2.26MiB207.06ms5.24ms58.39ms24.25ms267.83ms42.23ms39.95ms
273.14KiB2.26MiB207.10ms5.28ms57.60ms24.16ms274.26ms41.10ms38.83ms
273.14KiB2.26MiB207.53ms4.78ms59.08ms24.12ms271.91ms44.01ms40.57ms
273.14KiB2.26MiB209.43ms4.78ms58.64ms25.06ms280.05ms41.80ms41.55ms


Commit d937b23001 just prior to ContentList changes.

InputJDOMParseScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB209.18ms4.91ms61.01ms25.87ms281.87ms45.20ms41.76ms
273.14KiB2.26MiB210.77ms5.33ms61.24ms26.33ms279.61ms43.63ms41.20ms
273.14KiB2.26MiB210.33ms4.83ms62.62ms27.07ms281.42ms44.20ms42.00ms
273.14KiB2.26MiB210.20ms4.93ms60.93ms25.48ms279.78ms43.55ms43.90ms
273.14KiB2.26MiB211.23ms4.92ms60.77ms25.90ms281.52ms44.44ms41.80ms


Baseline Results - JDOM 1.1.2


Based on JDOM-1.1.2 in a the same Java6 code as below, using the xerces/jaxen jars from JDOM1.1.2
Note, the 'Parse' times are useless measures.

InputJDOMParseScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB212.31ms4.68ms12.47ms8.71ms259.47ms10.27ms8.15ms
273.14KiB2.26MiB199.44ms4.71ms11.57ms9.18ms260.96ms9.96ms9.11ms
273.14KiB2.26MiB200.48ms5.04ms11.67ms8.64ms260.08ms9.49ms8.14ms
273.14KiB2.26MiB199.52ms4.68ms11.30ms8.54ms256.91ms10.05ms8.52ms
273.14KiB2.26MiB199.18ms4.74ms11.27ms8.69ms259.17ms9.90ms7.94ms