Performance - Even
Both platforms perform extremely well for virtually all applications.
Not really much to set them apart, though my subjective experience is that Java has a slight edge for long running applications, whereas .Net is quicker for application startup time.
Tools available (even 3rd party tools) - Debatable
Depends on what tools you need and what you are familiar with.
.Net certainly has some great tools provided by Microsoft. On the other hand, there are equally good tools in the Java world e.g. in the Eclipse, Netbeans of IntelliJ environments.
Cross platform compatibility - Java win
.Net is fundamentally tied to Microsoft platforms (Windows, Xbox etc.). Complete implementations are not available for any non-Microsoft platforms.
Mono is nice, but it doesn't actually give you full cross-platform capability because it doesn't support all the .Net libraries (for example you can't expect all the Windows GUI stuff to work correctly, so unless you switch to a cross-platform toolkit such as GTK# you won't be able to run your app on different platforms)
Java is genuinely portable. Not just the language, but much more importantly all the Java libraries are portable. Providing you stick to pure Java libraries (e.g. Swing for GUI) then your code will run anywhere you have a Java runtime environment.
Libraries (especially 3rd party libraries) - Java win
Probably the best strength of the Java platform is the vast ecosystem of libraries, especially open source libraries. Some examples:
- All of the Apache libraries and tools
- All the libraries in the vast Eclipse ecosystem
- All the libraries contributed / maintained by Google
- JBoss and all the related enterprise tools maintained by Red Hat
Cost (Oracle seems to try and monetize Java) - Java win if you go open source, otherwise Even.
You can have a 100% open source Java stack which is free and doesn't tie you into any particular proprietary platform. This is 100% free.
Alternatively, you can buy IntelliJ IDEA, run Java on Windows and use a proprietary database, in which case it's pretty much the same cost-wise as a typical Microsoft .NET stack.
Development process (Easiest/Fastest) - Debatable
This probably depends more on the experience of your developers with each platform rather than the particular attributed of the platform.
.Net certainly has some great tools that can make you very productive for simple GUI apps on Windows. Not surprising as this is the "sweet spot" for .Net development.
On the other hand, I prefer the Java stack for server-side development. With tools like Maven and all the continuous deployment / integration capabilities you can establish a very effective development process for robust server-side apps.
Language-wise C# has some productivity advantages over Java. But on the other hand if you are developing on the Java platform nowadays the trend is not to use Java itself but instead use one of the new JVM languages such as Scala, Groovy or Clojure - if you do that then you will be far more productive than either C# or Java.