Running with a thread-unsafe collector, the benchmark ran in 9 seconds. We tested the client using either one or two marker threads, and running one or two client threads. Note that the client uses thread local allocation exclusively. These measurements do not use incremental collection, nor was prefetching enabled in the marker. We used the C version of the benchmark.
All measurements are in elapsed seconds on an unloaded machine.
The execution time for the single threaded case is slightly worse than with simple locking. The execution time for two clients with thread local allocation time is only 1.4 times the sequential execution time for a single thread in a thread-unsafe environment, even though it involves twice the client work. That represents close to a factor of 2 improvement over the 2 client case with the old collector. The old collector clearly still suffered from some contention overhead, in spite of the fact that the locking scheme had been fairly well tuned. These results are likely to be very sensitive to both hardware and OS issues.