后来又补充了一点:在很多情况下,Java是托管在Windows服务器上的,我认为是通过Tomcat(不确定)。这里的动机是什么?
Java经常用于后端开发(并已成为事实上的标准),原因如下:
C#在Windows中设计UI方面拥有很棒的工具和库。Java的跨操作系统(OS)特性为OS的特殊瑕疵提供了较少的工具,而C#是由Microsoft设计和维护,旨在编写Windows应用程序。
Java被认为更加成熟,这对于服务器是一个很好的特性,而C#在与Windows和Office的集成以及外观方面表现更好(这受到客户的喜爱)。
在服务器端,Java已被证明是强大且可扩展的,并且它可以在.NET只能梦想的平台上使用。因此,如果您想要在硬件方面拥有最多选择,Java是一个绝佳的选择 - 这包括具有许多CPU的非常大的机器以及许多集群化的廉价x86盒子。
如果您在服务器端使用.NET,则必须使用Windows,而Windows在硬件方面并不具备良好的可扩展性。
大多数服务器都是基于Windows或*nix的。因此,在服务器上,Java或.NET/C#(通过*nix上的mono)都可以完美地使用。
Java对不同客户端设备有更好的支持,但在许多方面,这种要求正在被大多数客户端的更好的HTML支持所取代-至少对于在线设备而言。
对于已安装的客户端应用程序,可以说Java具有更好的可移植性-但是随着诸如Compact Framework、Micro Framework、Silverlight等的出现,.NET正在迎头赶上。
就个人而言(由于工作角色),我主要关心服务器上的内容;.NET/C#从未让我失望-但我不是Java开发人员,因此无法进行直接对比。从开源项目的工作中,我知道有很好的社区人员在服务器上使用mono。
在客户端,像WPF这样的工具提供了一流的GUI体验,而.NET对winforms的支持对于常规的Windows应用程序也很有用。但由于WPF架构的许多部分与Silverlight相同(*nix等的Moonlight作为其mono双胞胎),因此这使得该体验也可以在非Windows客户端上使用。
就Java而言,有两件事情需要注意:
Fortyrunner,我还没有看到过一项基准测试,其中热点JVM能够击败MS CLR。