I can't stand either JVM or .NET: they're both exactly what Eric is saying - less mature, less featured, but nevertheless big and fat operating systems built on top of real OS. If you look at them this way, it appears that your applications are NOT portable (your app will need JVM OS to run on, it wont' run on just Linux or BSD or Windows).
I much prefer Python+C or Ruby+C pair running on POSIX-compatible OS. It gives you performance, portability and higher level of abstraction provided by Python/Ruby and native speed of C. You are also free to decide and pick between multiprocess/multithreading as well: nothing is forced down your throat.
On a side note, I believe that virtualization and especially paravirtualization make JavaOS or .NETOS obsolete even more, since it gives you a real "OS in the box": I can build my system using any kind of most obscure languages I can think of, package them all inside of a Xen image and deploy with a click of a button.
There'd be no Unix, thus no Unix-Java mismatch. You'd only have Java tools (such as they are) to manage your Java code. Of course, you'd have different problems.
I much prefer Python+C or Ruby+C pair running on POSIX-compatible OS. It gives you performance, portability and higher level of abstraction provided by Python/Ruby and native speed of C. You are also free to decide and pick between multiprocess/multithreading as well: nothing is forced down your throat.
On a side note, I believe that virtualization and especially paravirtualization make JavaOS or .NETOS obsolete even more, since it gives you a real "OS in the box": I can build my system using any kind of most obscure languages I can think of, package them all inside of a Xen image and deploy with a click of a button.