Thanks for the details. Your test environment sounds reasonable, as well as the results (mabe except for the xmall.txt-results, which seem to be somewhat influenced by other factors. Side effects are easy to see if the results are visualized on a logarithmic scale). If you're using the -r option in BaseX, the results will always be much faster, as the same code is run again and again, and numerous side-effects are this minimized. In fact, the results wouldn't be comparable if the option had been used; it should only be used for tests inside BaseX.
Just a hint: in the small.txt file, one result for eXist is missing.
Looking forward to your final results, Christian
It might be interesting to swap the order in which you're running the queries. A query might be executed faster in Java if it's executed at the end of the test, as the JIT compiler will delay initial processes; garbage collection might influence runtimes as well, etc. If you don't restart the database server every time you run new queries, the differences should be less significant.
I wasn't turning up and down the servers after each query. What I did every time before testing each query I was running a couple of random ones. This way the initial execution of each query took more time and it smoothed out the more I executed the same one. In addition I didnt use the '-r' of basex because the results were always much faster -is there any kind of pipelining teke place there?- and since no other system had such an option I went with normal runs. Usually basex wanted 10 executions of a query in a row to reach its minimum -then it flunctuates reasonably- similarly for exist. Monet was more stable in the sense that it could reach its minimum sometimes from the first query. That might be differences in C and Java though. Note that I had to compile Monet on my system, no binary worked for me.