Java应用程序:Windows与Mac OS X的区别

7
我在小型Windows桌面上开发了一款Java应用程序,用于解析XML文件。我做了一个可执行的jar包,并在非常强大的Windows服务器上运行它。该服务器拥有2个物理Xeon处理器,每个处理器有8个核心,时钟频率为2.7 GHz,50GB RAM和7200 RPM硬盘。当我启动应用程序时,机器处于空闲状态,我很确定没有其他应用程序与我共享该机器。
后来,出于好奇心,我在我的Macbook Pro上运行了这个可执行文件,我的个人电脑是Core i7,时钟频率为2.2 GHz,4 GB RAM和5400 RPM硬盘。
令人惊讶的是,这个应用程序在我的较弱的个人电脑上运行速度是服务器的两倍。它的输入和输出都是相同的,没有IO,只是读取XML并解析它们,我在终端上打印的只有开始时间、结束时间和最终结果,只有一行。
我非常好奇这种显著的性能差异背后的原因。特别是从硬件层面来看,这个较弱的机器怎么可能比服务器更快呢?是操作系统更好地处理了硬件吗?还是JVM工作得更好了?
1个回答

9

在Windows默认安装的JRE中,带有HotSpot客户端编译器。与HotSpot服务器不同,该编译器仅执行基本优化,并且生成的代码速度较慢。HotSpot服务器是大多数类Unix和Linux发行版(包括Mac OS X)的默认设置。这两个编译器之间的性能差异通常可以达到2-3倍。客户端 HotSpot 主要针对桌面应用程序的更快启动进行了优化,而不是针对长时间运行进程的最佳性能。

要检查您正在使用哪个编译器,请执行以下命令:

java -version

在我的电脑上运行,它会显示:

java version "1.6.0_45"
Java (TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
                        ^^^^^^  this

要在Windows上使用Server HotSpot,您需要下载并安装JDK,然后使用-server命令行开关运行程序。

你好Piotr,你确定这个吗?会导致如此显著的性能差异,并使性能较弱的机器表现更好。你认为我应该用Linux发行版替换Windows吗?我投票感谢你提供的非常有益的信息。谢谢。 - mowienay
首先 - 只需检查该Windows机器上的HotSpot编译器类型。可能还有其他导致性能差异的原因,但这是我脑海中的一些内容。 - Piotr Kołaczkowski
我按照你说的做了。使用服务器顺序,它在我的桌面Windows机器上像我的个人Mac一样工作。那是非常非常有益的建议。我非常兴奋地想看看在服务器强大的机器上的性能。再次感谢你。 - mowienay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接