JDOM2 Relative JDOM and JDK Performance

Java manipulation of XML made easy.

The following is a basic metric of the performance characteristics of JDOM and JDOM2. The identical code/classes are run in Java5, Java6, and Java7. The code is compiled by Java6 JDK with a 1.5 .class target. 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.

For details of the actual test cases have a look at the Peformance Page

The following metrics are (currently) produced:

The following tests were run one after the next, on my laptop. The code running the test is the same code that was used for the performance regression monitoring of JDOM2. This code was back-ported to support JDOM 1.1.3 (with some obvious limitations including StAX results). The

Out of interest, the standard JDOM2 performance test uses an XPath expresson of "//node()" as one of it's tests. This does not work on JDOM 1.1.3 (not yet sure why - but it returns no results). So, I changed it to be "//." and that works on both JDOM2 and 1.1.3. Thus, all comparative tests use "//." (and "//null") for the XPath performance test. But, the performance is very different.... between "//node()" and "//.":


JDOM2 - JRE7 with With XPath "//null" and "//node()" - 19841 results form hamlet.xml (includes the Document).

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.05ms1.74ms7.56ms1.61ms5.47ms1.86ms9.21ms3.27ms3.35ms14.88ms9.17ms29.40ms11.76ms9.59ms
273.14KiB2.06MiB5.54ms1.57ms7.55ms2.35ms5.08ms1.32ms9.73ms3.74ms3.22ms14.34ms8.92ms29.44ms11.71ms9.83ms
273.14KiB2.06MiB5.42ms2.05ms7.13ms2.63ms4.93ms1.51ms9.04ms3.12ms3.05ms14.05ms10.01ms29.24ms12.06ms9.74ms
273.14KiB2.06MiB4.79ms1.39ms7.75ms3.10ms5.30ms1.68ms9.35ms2.51ms3.16ms14.87ms9.52ms29.35ms11.47ms9.44ms
273.14KiB2.06MiB5.05ms1.64ms8.01ms3.32ms4.84ms1.32ms9.56ms3.22ms3.25ms15.84ms9.70ms29.23ms10.85ms10.81ms

JDOM2 - JRE7 with With XPath "//null" and "//." - 19840 results form hamlet.xml (excludes the Document).

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.11ms1.47ms8.40ms2.77ms4.58ms0.60ms9.48ms2.84ms3.48ms15.07ms9.39ms15.19ms10.80ms10.05ms
273.14KiB2.06MiB5.26ms1.49ms7.49ms2.12ms4.42ms0.78ms8.72ms2.00ms3.31ms15.02ms10.22ms15.81ms10.65ms9.75ms
273.14KiB2.06MiB5.06ms1.20ms7.81ms3.07ms4.56ms0.78ms9.13ms3.51ms3.37ms14.09ms9.47ms15.62ms10.98ms9.58ms
273.14KiB2.06MiB4.82ms1.68ms7.56ms2.73ms4.61ms1.20ms8.56ms2.44ms3.57ms14.52ms9.49ms15.03ms11.55ms10.08ms
273.14KiB2.06MiB5.17ms1.48ms8.04ms3.30ms4.85ms1.24ms9.05ms3.11ms3.21ms14.14ms9.20ms16.17ms11.58ms9.85ms
So, the bottom line is that the XPath expression has a big impact on performance.

Comparative results for Java Versions.

Java Versions for JDOM2


Java7

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.13ms1.88ms7.20ms1.69ms0.01ms0.00ms0.01ms-0.00ms3.26ms14.98ms9.73ms14.86ms11.66ms9.94ms
273.14KiB2.06MiB5.12ms1.32ms7.66ms2.96ms0.01ms0.00ms0.01ms-0.00ms3.38ms14.74ms9.85ms15.61ms11.32ms9.99ms
273.14KiB2.06MiB5.47ms2.27ms7.36ms2.65ms0.01ms0.00ms0.01ms0.00ms3.45ms14.58ms9.66ms14.41ms12.36ms10.32ms
273.14KiB2.06MiB4.69ms1.55ms7.82ms2.37ms0.01ms0.00ms0.01ms0.00ms3.15ms15.24ms9.04ms14.48ms11.75ms10.03ms
273.14KiB2.06MiB5.07ms2.03ms7.69ms2.97ms0.02ms0.00ms0.01ms0.00ms3.61ms14.40ms9.83ms15.11ms10.92ms9.45ms

Java6

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB4.78ms1.80ms7.70ms2.71ms0.01ms-0.00ms0.01ms-0.00ms3.47ms15.56ms10.48ms17.61ms11.88ms9.40ms
273.14KiB2.06MiB4.97ms1.21ms7.13ms1.80ms0.01ms-0.00ms0.01ms0.00ms3.21ms15.31ms9.41ms18.50ms10.96ms9.53ms
273.14KiB2.06MiB4.84ms1.42ms7.69ms3.17ms0.01ms-0.00ms0.01ms-0.00ms3.39ms15.18ms10.30ms18.21ms11.75ms9.97ms
273.14KiB2.06MiB4.90ms1.81ms7.56ms2.54ms0.01ms-0.00ms0.01ms-0.00ms3.48ms14.61ms10.12ms17.99ms11.75ms9.80ms
273.14KiB2.06MiB4.83ms1.54ms7.76ms3.16ms0.01ms-0.00ms0.01ms0.00ms3.50ms15.06ms9.15ms18.26ms12.41ms9.42ms

Java5

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.83MiB13.22ms6.19ms18.34ms7.79ms0.00ms0.00ms0.00ms-0.00ms7.90ms28.42ms23.33ms48.88ms30.12ms22.84ms
273.14KiB1.83MiB13.92ms7.31ms18.84ms8.23ms0.00ms0.00ms0.00ms0.00ms8.37ms29.33ms22.44ms49.11ms29.81ms25.02ms
273.14KiB1.83MiB13.49ms6.98ms18.18ms7.34ms0.00ms0.00ms0.00ms-0.00ms8.15ms31.16ms23.83ms48.87ms27.78ms25.79ms
273.14KiB1.83MiB13.61ms6.80ms18.57ms8.48ms0.00ms0.00ms0.01ms0.00ms8.29ms31.78ms23.96ms48.90ms30.55ms23.65ms
273.14KiB1.83MiB13.09ms6.37ms18.71ms8.11ms0.00ms0.00ms0.00ms-0.00ms8.38ms29.00ms23.54ms48.99ms26.93ms24.68ms

Java Versions for JDOM 1.1.3


Java7

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB5.81ms5.80ms7.36ms2.48ms0.01ms-0.00ms0.01ms0.00ms2.25ms10.44ms7.79ms23.61ms9.88ms7.61ms
273.14KiB2.26MiB5.14ms5.13ms7.38ms2.40ms0.01ms-0.00ms0.01ms0.00ms2.20ms10.10ms9.48ms24.06ms8.94ms7.88ms
273.14KiB2.26MiB6.26ms6.25ms8.10ms3.25ms0.01ms-0.00ms0.01ms0.00ms2.25ms10.19ms8.17ms23.43ms9.54ms8.08ms
273.14KiB2.26MiB4.95ms4.94ms7.85ms3.14ms0.01ms-0.00ms0.01ms-0.00ms2.32ms10.15ms7.94ms23.08ms9.27ms7.57ms
273.14KiB2.26MiB4.75ms4.74ms8.17ms3.42ms0.01ms-0.00ms0.01ms0.00ms2.37ms10.19ms7.88ms23.90ms9.51ms7.74ms

Java6

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB5.52ms5.50ms7.87ms3.01ms0.01ms-0.00ms0.01ms-0.00ms2.84ms12.07ms9.11ms23.32ms10.51ms8.36ms
273.14KiB2.26MiB4.86ms4.85ms7.94ms3.09ms0.01ms-0.00ms0.01ms0.00ms2.60ms12.88ms8.76ms23.30ms10.98ms8.22ms
273.14KiB2.26MiB5.32ms5.31ms7.70ms2.80ms0.01ms-0.00ms0.01ms-0.01ms2.76ms12.36ms9.15ms23.40ms10.63ms8.75ms
273.14KiB2.26MiB5.33ms5.32ms7.66ms2.70ms0.01ms-0.00ms0.01ms0.00ms2.60ms13.33ms9.27ms23.76ms10.28ms8.86ms
273.14KiB2.26MiB5.12ms5.10ms7.50ms2.80ms0.01ms-0.00ms0.01ms-0.00ms2.79ms12.75ms8.97ms23.94ms10.34ms8.18ms

Java5

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.78MiB10.23ms10.23ms18.01ms7.14ms0.00ms-0.00ms0.00ms-0.00ms8.52ms24.37ms19.47ms56.99ms22.31ms19.33ms
273.14KiB1.78MiB10.46ms10.46ms16.87ms6.00ms0.00ms-0.00ms0.00ms-0.00ms8.37ms24.31ms19.21ms56.21ms23.18ms18.52ms
273.14KiB1.78MiB10.43ms10.43ms17.06ms6.25ms0.00ms-0.00ms0.00ms0.00ms8.52ms24.69ms18.76ms56.60ms22.37ms18.77ms
273.14KiB1.78MiB10.17ms10.16ms16.30ms6.13ms0.00ms-0.00ms0.00ms0.00ms8.52ms24.70ms19.06ms55.47ms22.86ms19.00ms
273.14KiB1.78MiB10.40ms10.39ms17.55ms6.82ms0.00ms-0.00ms0.00ms0.00ms8.63ms34.33ms20.60ms55.54ms22.26ms18.26ms

Comparative results - JDOM2 vs JDOM 1.1.3

JDOM2 vs JDOM 1.1.3 in Java7


JDOM2

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB5.13ms1.88ms7.20ms1.69ms0.01ms0.00ms0.01ms-0.00ms3.26ms14.98ms9.73ms14.86ms11.66ms9.94ms
273.14KiB2.06MiB5.12ms1.32ms7.66ms2.96ms0.01ms0.00ms0.01ms-0.00ms3.38ms14.74ms9.85ms15.61ms11.32ms9.99ms
273.14KiB2.06MiB5.47ms2.27ms7.36ms2.65ms0.01ms0.00ms0.01ms0.00ms3.45ms14.58ms9.66ms14.41ms12.36ms10.32ms
273.14KiB2.06MiB4.69ms1.55ms7.82ms2.37ms0.01ms0.00ms0.01ms0.00ms3.15ms15.24ms9.04ms14.48ms11.75ms10.03ms
273.14KiB2.06MiB5.07ms2.03ms7.69ms2.97ms0.02ms0.00ms0.01ms0.00ms3.61ms14.40ms9.83ms15.11ms10.92ms9.45ms

JDOM 1.1.3

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB5.81ms5.80ms7.36ms2.48ms0.01ms-0.00ms0.01ms0.00ms2.25ms10.44ms7.79ms23.61ms9.88ms7.61ms
273.14KiB2.26MiB5.14ms5.13ms7.38ms2.40ms0.01ms-0.00ms0.01ms0.00ms2.20ms10.10ms9.48ms24.06ms8.94ms7.88ms
273.14KiB2.26MiB6.26ms6.25ms8.10ms3.25ms0.01ms-0.00ms0.01ms0.00ms2.25ms10.19ms8.17ms23.43ms9.54ms8.08ms
273.14KiB2.26MiB4.95ms4.94ms7.85ms3.14ms0.01ms-0.00ms0.01ms-0.00ms2.32ms10.15ms7.94ms23.08ms9.27ms7.57ms
273.14KiB2.26MiB4.75ms4.74ms8.17ms3.42ms0.01ms-0.00ms0.01ms0.00ms2.37ms10.19ms7.88ms23.90ms9.51ms7.74ms

JDOM2 vs JDOM 1.1.3 in Java6


JDOM2

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.06MiB4.78ms1.80ms7.70ms2.71ms0.01ms-0.00ms0.01ms-0.00ms3.47ms15.56ms10.48ms17.61ms11.88ms9.40ms
273.14KiB2.06MiB4.97ms1.21ms7.13ms1.80ms0.01ms-0.00ms0.01ms0.00ms3.21ms15.31ms9.41ms18.50ms10.96ms9.53ms
273.14KiB2.06MiB4.84ms1.42ms7.69ms3.17ms0.01ms-0.00ms0.01ms-0.00ms3.39ms15.18ms10.30ms18.21ms11.75ms9.97ms
273.14KiB2.06MiB4.90ms1.81ms7.56ms2.54ms0.01ms-0.00ms0.01ms-0.00ms3.48ms14.61ms10.12ms17.99ms11.75ms9.80ms
273.14KiB2.06MiB4.83ms1.54ms7.76ms3.16ms0.01ms-0.00ms0.01ms0.00ms3.50ms15.06ms9.15ms18.26ms12.41ms9.42ms

JDOM 1.1.3

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB2.26MiB5.52ms5.50ms7.87ms3.01ms0.01ms-0.00ms0.01ms-0.00ms2.84ms12.07ms9.11ms23.32ms10.51ms8.36ms
273.14KiB2.26MiB4.86ms4.85ms7.94ms3.09ms0.01ms-0.00ms0.01ms0.00ms2.60ms12.88ms8.76ms23.30ms10.98ms8.22ms
273.14KiB2.26MiB5.32ms5.31ms7.70ms2.80ms0.01ms-0.00ms0.01ms-0.01ms2.76ms12.36ms9.15ms23.40ms10.63ms8.75ms
273.14KiB2.26MiB5.33ms5.32ms7.66ms2.70ms0.01ms-0.00ms0.01ms0.00ms2.60ms13.33ms9.27ms23.76ms10.28ms8.86ms
273.14KiB2.26MiB5.12ms5.10ms7.50ms2.80ms0.01ms-0.00ms0.01ms-0.00ms2.79ms12.75ms8.97ms23.94ms10.34ms8.18ms

JDOM2 vs JDOM 1.1.3 in Java5


JDOM2

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.83MiB13.22ms6.19ms18.34ms7.79ms0.00ms0.00ms0.00ms-0.00ms7.90ms28.42ms23.33ms48.88ms30.12ms22.84ms
273.14KiB1.83MiB13.92ms7.31ms18.84ms8.23ms0.00ms0.00ms0.00ms0.00ms8.37ms29.33ms22.44ms49.11ms29.81ms25.02ms
273.14KiB1.83MiB13.49ms6.98ms18.18ms7.34ms0.00ms0.00ms0.00ms-0.00ms8.15ms31.16ms23.83ms48.87ms27.78ms25.79ms
273.14KiB1.83MiB13.61ms6.80ms18.57ms8.48ms0.00ms0.00ms0.01ms0.00ms8.29ms31.78ms23.96ms48.90ms30.55ms23.65ms
273.14KiB1.83MiB13.09ms6.37ms18.71ms8.11ms0.00ms0.00ms0.00ms-0.00ms8.38ms29.00ms23.54ms48.99ms26.93ms24.68ms

JDOM 1.1.3

InputJDOMSAXSAXJDOMDOMJStAXSStAXSJStAXEStAXEJScanDumpDupeXPathCheckedUnChecked
273.14KiB1.78MiB10.23ms10.23ms18.01ms7.14ms0.00ms-0.00ms0.00ms-0.00ms8.52ms24.37ms19.47ms56.99ms22.31ms19.33ms
273.14KiB1.78MiB10.46ms10.46ms16.87ms6.00ms0.00ms-0.00ms0.00ms-0.00ms8.37ms24.31ms19.21ms56.21ms23.18ms18.52ms
273.14KiB1.78MiB10.43ms10.43ms17.06ms6.25ms0.00ms-0.00ms0.00ms0.00ms8.52ms24.69ms18.76ms56.60ms22.37ms18.77ms
273.14KiB1.78MiB10.17ms10.16ms16.30ms6.13ms0.00ms-0.00ms0.00ms0.00ms8.52ms24.70ms19.06ms55.47ms22.86ms19.00ms
273.14KiB1.78MiB10.40ms10.39ms17.55ms6.82ms0.00ms-0.00ms0.00ms0.00ms8.63ms34.33ms20.60ms55.54ms22.26ms18.26ms