Ah... thanks! That indeed appears to be the main issue. The difference between the two systems is a different default stack size! Using 'uname -s 1024' allows both to get just over 3000 threads off.
Getting back to the Java, tweaking -Xss looks like it should help take care of things.
Just do some basic math:
10MB stack/thread * 304 threads =~ 3GB stack unlimited translates to 2MB (that's hardcoded) 2MB stack/thread * 1519 threads =~ 3GB stack
If you don't like limited stacks, use a 64bit platform. Otherwise use the function which is part of Unix for ages: pthread_attr_setstacksize.