This report, although meant to benchmark Linux NPTL, appears to indicate that Sun's Java virtual machine (1.4.2) doesn't scale properly, while IBM's does.

I wouldn't be too certain of the results quite yet, though. (updated)

The report appears to have been updated once because "object creation was the major source for the non-linear behaviour of the tests". However, from what I can read, no JVM options have been used to adjust the behaviour, which means that, at least for Sun's HotSpot JVM, it falls back to traditional, safe, but unscalable stop-the-world garbage collection utilizing a single thread. So while the updated benchmark avoids most of its original massive gc load, the new version is still single threaded when it does need to collect garbage. update: the report has been updated once again to reflect this, but only at the very end, so be careful reading it.

correct results for Sun at the end

Not having an 8-way Xeon to test things on, I can't say for sure, but I'd be willing to bet results would be quite different if the benchmark was run with the options -XX:+UseConcMarkSweepGC and -XX:+UseParNewGC, which will ensure that the execution of the program is stopped during gc as rarely as possible, and when it is, the work done during gc utilizes all processors. update: turns out this was true: now the exponential behaviour is gone. IBM's JVM still looks to be slightly faster, but that could be due to many things. The important part is that both scale correctly.

Sun's documentation on this is quite informative, and has in fact improved somewhat since 1.4.1 release.

I can't find similar documentation concerning IBM's JVM, but based on the benchmark I'd have to guess they may be using a parallel GC by default.